Есть ли способ остановить Emacs
автоматическое перемещение позиции текстового курсора (точки) во время прокрутки? Я постоянно теряю свое местоположение и отметки из-за этого раздражающего поведения.
Я попробовал следующее предложение, но безуспешно:
(setq scroll-preserve-screen-position t
scroll-conservatively 0)
(Я использую Emacs
24.2 на Ubuntu и OS X.)
решение1
Я думаю, вы хотите, чтобы поведение курсора (точки) и видимой области было как в notepad
, gedit
, других современных редакторах: возможность изменять видимую область независимо от позиции точки и немедленно возвращать видимую область в позицию точки после перемещения точки. Но emacs
имеет другую концепцию: видимая область всегда следует за позицией точки и наоборот.
Смотрите такжеhttps://stackoverflow.com/questions/9616623/ctrl-up-down-style-scrolling-in-emacs
Предыдущий ответ показывает особую идиому: если вы хотите переместить видимую область (вместе с точкой) далеко от текущего положения, а затем вернуть точку точно в предыдущее положение, вы должны иметь привычку использовать mark-ring
. Всегда есть путь mark ring
к текущему рабочему положению: многие команды, такие как isearch-forward
, beginning-of-buffer
, ace-jump-mode
автоматически сохраняют предыдущее положение в , mark ring
и вам не следует использовать C-<SPC> C-<SPC>
before, а только C-u C-<SPC>
для перехода назад. Команды прокрутки, такие как scroll-up
или mwheel-scroll
, не сохраняют автоматически предыдущее положение по умолчанию, потому что это может привести к слишком большому количеству избыточных отметок.
Вы можете использовать команды clone-indirect-buffer
или view-buffer-other-window
для независимой работы с буфером в нескольких местах. И использовать команду recenter-top-bottom
( C-l
) для постоянного удержания точки в центре видимой области.
решение2
Я не знаю, есть ли способ остановить emacs от перемещения вашей точки при прокрутке. Но если вы хотите сохранить свое местоположение, чтобы вернуться к нему позже, вы можете использоватьмаркировать кольцо.
То есть, введите текст C-<SPC> C-<SPC>
, чтобы поместить текущее местоположение точки в кольцо меток, а затем введите текст, C-u C-<SPC>
чтобы установить точку в предыдущее местоположение в кольце меток.
решение3
Я использую это:
;;; scrollers - M-f, M-b
(global-set-key "\M-f" "\C-u1\C-v")
(global-set-key "\M-b" "\C-u1\M-v")
решение4
Мне подходит следующее:
(custom-set-variables
'(scroll-conservatively 1000)
'(scroll-margin 3)
)