Не меняйте позицию курсора при прокрутке в Emacs

Не меняйте позицию курсора при прокрутке в Emacs

Есть ли способ остановить Emacsавтоматическое перемещение позиции текстового курсора (точки) во время прокрутки? Я постоянно теряю свое местоположение и отметки из-за этого раздражающего поведения.

Я попробовал следующее предложение, но безуспешно:

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

(Я использую Emacs24.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)
 )

Связанный контент