Nie zmieniaj pozycji kursora podczas przewijania w Emacsie

18

Czy istnieje sposób, aby zatrzymać Emacsautomatyczne przesuwanie mojej pozycji kursora tekstowego (aka, punkt) podczas przewijania? Tracę swoją lokalizację i znaki tym irytującym zachowaniem.

Przetestowałem następującą sugestię, bezskutecznie:

(setq scroll-preserve-screen-position t
scroll-conservatively 0)

(Używam Emacs24.2 na Ubuntu i OS X.)

NVaughan
źródło

Odpowiedzi:

11

Myślę, że chcesz, aby zachowanie kursora (punktu) i widocznego obszaru było takie notepad, jak w geditinnych współczesnych edytorach: możliwość zmiany widocznego obszaru niezależnie od położenia punktu i natychmiastowego przywracania widocznego obszaru do położenia punktu po przesunięciu punktu. Ale emacsma inną koncepcję: widoczny obszar zawsze podąża za pozycją punktu i odwrotnie.

Zobacz także /programming/9616623/ctrl-up-down-style-scrolling-in-emacs

Poprzednia odpowiedź pokazuje specjalny idiom: jeśli chcesz przesunąć widoczny obszar (razem z punktem) daleko od aktualnej pozycji, a następnie zwrócić punkt dokładnie w poprzedniej pozycji, powinieneś mieć nawyk używania mark-ring. Nie zawsze jest to droga przez mark ringdo aktualnej pozycji roboczej: Wiele poleceń, jak isearch-forward, beginning-of-buffer, ace-jump-modeautomatycznie zapisać w poprzedniej pozycji mark ringi nie należy wykorzystać C-<SPC> C-<SPC>wcześniej, ale tylko C-u C-<SPC>do skoków plecach. Polecenia przewijania, takie jak scroll-uplub mwheel-scroll, domyślnie nie zapisują automatycznie poprzedniej pozycji, ponieważ może powodować zbyt wiele nadmiernych znaków.

Możesz używać poleceń clone-indirect-bufferlub view-buffer-other-windowdo niezależnej pracy z buforem w kilku miejscach. I użyj polecenia recenter-top-bottom( C-l), aby stale utrzymywać punkt w środku widocznego obszaru.

Artscan
źródło
2
Dzięki. Ciekawa odpowiedź. Wygląda jednak na problem z moimi Emacsem (zarówno na Macu, jak i na Ubuntu): C-u C-<SPC>wydaje się, że nie działa. Nie wiem, czy to problem, cua-modeczy coś. Próbowałem uruchomić Emacsa z -qopcją, ale nic się nie zmieniło. Jakieś pomysły?
NVaughan
To źle ... Uważam to za bardzo denerwujące, ponieważ używam highlight-symbol-mode. Ustawiam kursor na jednej zmiennej, która podświetla wszystkie wystąpienia. Kiedy zaczynam przewijać, kursor opuszcza zmienną i wszystkie podświetlenia są tracone. Emacs byłby znacznie lepszy, gdyby przynajmniej zachowywał się jak inni współcześni redaktorzy w zakresie przewijania.
itmuckel
7

Nie wiem, czy istnieje sposób, aby powstrzymać emacsa przed przesunięciem punktu podczas przewijania. Ale jeśli chcesz zapisać swoją lokalizację, aby wrócić do niej później, możesz użyć pierścienia znaku .

Oznacza to, że wpisz, C-<SPC> C-<SPC>aby przesunąć bieżącą lokalizację punktu na pierścień znaku, a następnie wpisz, C-u C-<SPC>aby ustawić punkt na poprzednią lokalizację w pierścieniu znaku.

Cyryl
źródło
3

Używam tego:

;;; scrollers - M-f, M-b
(global-set-key "\M-f" "\C-u1\C-v")
(global-set-key "\M-b" "\C-u1\M-v")
Siergiej
źródło
0

Poniższe działa dla mnie:

(custom-set-variables
 '(scroll-conservatively 1000)
 '(scroll-margin 3)
 )
jeden z japońskich użytkowników Emacsa
źródło