После издания scroll-up
или scroll-down
в emacs, там быстрый способ возвратить точку ее предыдущему положению (предполагающий, что я не помнил добавлять его к кольцу метки)?
Кроме того, есть ли какой-либо путь (не вмешиваясь в кольцо метки) для изменения поведения прокрутки так, чтобы прокрутка затем прокручивающий вниз (или наоборот) возвратила точку своему исходному положению? (например, заставьте прокрутку переместить точку точно x строки, где x является экранной высотой),
Я нахожусь в процессе привычки меня к emacs, и это - одна из наиболее распространенных вызывающих проклятие ситуаций: Я прокручиваю вокруг для просмотра другой части моего кода, не помня добавлять мою строку к кольцу метки, и затем это болезненно, чтобы попытаться переместить строку кода, я продолжал работать. По сути, в то время как я прошу техническое решение, мне также было бы интересно слышать, как опытные пользователи избегают этой проблемы. Вы просто привыкаете к тому, чтобы не забывать установить метку, разделить окно, чтобы озираться или использовать некоторый другой шаблон?
Спасибо
(setq scroll-preserve-screen-position t)
С этой установкой, если Вы разбиваете на страницы вверх и вниз, курсор возвращается к своей исходной строке. Это также сохраняет свой первоначальный столбец в версии 23 Emacs или более новый.
Вы можете или не можете предпочесть
(setq scroll-preserve-screen-position 'always)
который всегда сохраняет экранное положение курсора при прокрутке, вместо того, чтобы сохранить позицию курсора в буфере, если исходное положение все еще видимо.
Что я нашел для работы, хорошо использует goto-last-change.el
, который выталкивает Вас назад к местоположению, где Вы в последний раз сделали редактирование. Мне нравится привязка:
(require 'goto-last-change) ;; download this package and install in load-path
(global-set-key (kbd "C-x C-\\") 'goto-last-change)
В ответе на Ваш вопрос о том, как я избегаю проблемы, которую Вы описываете (смотрящий в другом месте в коде и затем возвращающийся до такой степени, когда я работал)...
Как правило, я разделю экран, когда я должен буду кратко посмотреть в другом месте. Затем я могу возвратиться к исходному экрану с C-x o
, неразделенный с C-x 1
и я вернулся к нормальному.
Я также использую вперед и инвертирую i-поиск для определения местоположения конкретного интересного места в коде. Я нахожу, что это - довольно эффективный способ переместиться по коду, когда я знаю то, что я ищу.
Если я только прокручиваю несколько строк от того, где я в настоящее время в, я могу использовать это для прокрутки окна, не перемещая точку:
(defun scroll-in-place (scroll-up)
"Scroll window up (or down) without moving point (if possible).
SCROLL-Up is non-nil to scroll up one line, nil to scroll down."
(interactive)
(let ((pos (point))
(col (current-column))
(up-or-down (if scroll-up 1 -1)))
(scroll-up up-or-down)
(if (pos-visible-in-window-p pos)
(goto-char pos)
(if (or (eq last-command 'next-line)
(eq last-command 'previous-line))
(move-to-column temporary-goal-column)
(move-to-column col)
(setq temporary-goal-column col))
(setq this-command 'next-line))))
;;;; ------------------------------------------------------------------------
(defun scroll-up-in-place ()
"Scroll window up without moving point (if possible)."
(interactive)
(scroll-in-place t))
;;;; ------------------------------------------------------------------------
(defun scroll-down-in-place ()
"Scroll window up without moving point (if possible)."
(interactive)
(scroll-in-place nil))
(global-set-key (read-kbd-macro "M-<down>") 'scroll-up-in-place)
(global-set-key (read-kbd-macro "M-<up>") 'scroll-down-in-place)
Если я отъезжаю к совершенно другому разделу файла (или в другой файл в целом), я иногда использую breadcrumb
хотя существует много других пакетов, которые делают подобные вещи.
Если я должен визуально видеть две области кода одновременно, я разделю кадр горизонтально на два окна и затем удалю второе окно, когда я буду сделан.
Главным образом, тем не менее, я просто использую два кадра, один являющийся моим текущим рабочим кадром и другим мой ссылочный кадр, используемый для перехода вокруг того же или других файлов.