emacs: Как возвратиться к последней позиции после прокрутки/страница/вниз?

После издания scroll-up или scroll-down в emacs, там быстрый способ возвратить точку ее предыдущему положению (предполагающий, что я не помнил добавлять его к кольцу метки)?

Кроме того, есть ли какой-либо путь (не вмешиваясь в кольцо метки) для изменения поведения прокрутки так, чтобы прокрутка затем прокручивающий вниз (или наоборот) возвратила точку своему исходному положению? (например, заставьте прокрутку переместить точку точно x строки, где x является экранной высотой),

Я нахожусь в процессе привычки меня к emacs, и это - одна из наиболее распространенных вызывающих проклятие ситуаций: Я прокручиваю вокруг для просмотра другой части моего кода, не помня добавлять мою строку к кольцу метки, и затем это болезненно, чтобы попытаться переместить строку кода, я продолжал работать. По сути, в то время как я прошу техническое решение, мне также было бы интересно слышать, как опытные пользователи избегают этой проблемы. Вы просто привыкаете к тому, чтобы не забывать установить метку, разделить окно, чтобы озираться или использовать некоторый другой шаблон?

Спасибо

14
задан 03.09.2010, 19:31

4 ответа

(setq scroll-preserve-screen-position t)

С этой установкой, если Вы разбиваете на страницы вверх и вниз, курсор возвращается к своей исходной строке. Это также сохраняет свой первоначальный столбец в версии 23 Emacs или более новый.

Вы можете или не можете предпочесть

(setq scroll-preserve-screen-position 'always)

который всегда сохраняет экранное положение курсора при прокрутке, вместо того, чтобы сохранить позицию курсора в буфере, если исходное положение все еще видимо.

13
ответ дан 07.12.2019, 11:18

Что я нашел для работы, хорошо использует 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)
6
ответ дан 07.12.2019, 11:18

В ответе на Ваш вопрос о том, как я избегаю проблемы, которую Вы описываете (смотрящий в другом месте в коде и затем возвращающийся до такой степени, когда я работал)...

Как правило, я разделю экран, когда я должен буду кратко посмотреть в другом месте. Затем я могу возвратиться к исходному экрану с C-x o, неразделенный с C-x 1 и я вернулся к нормальному.

Я также использую вперед и инвертирую i-поиск для определения местоположения конкретного интересного места в коде. Я нахожу, что это - довольно эффективный способ переместиться по коду, когда я знаю то, что я ищу.

1
ответ дан 07.12.2019, 11:18

Если я только прокручиваю несколько строк от того, где я в настоящее время в, я могу использовать это для прокрутки окна, не перемещая точку:

(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 хотя существует много других пакетов, которые делают подобные вещи.

Если я должен визуально видеть две области кода одновременно, я разделю кадр горизонтально на два окна и затем удалю второе окно, когда я буду сделан.

Главным образом, тем не менее, я просто использую два кадра, один являющийся моим текущим рабочим кадром и другим мой ссылочный кадр, используемый для перехода вокруг того же или других файлов.

0
ответ дан 07.12.2019, 11:18

Теги

Похожие вопросы