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

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

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

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

спасибо

4
задан Ian Mackinnon
13.11.2022 4:00 Количество просмотров материала 2544
Распечатать страницу

4 ответа

(setq scroll-preserve-screen-position t)

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

Вы может и не предпочитают

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

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

13
отвечен Gilles 2022-11-14 11:48

что я нашел, чтобы хорошо работать с помощью 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
отвечен Trey Jackson 2022-11-14 14:05

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

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

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

1
отвечен Mox 2022-11-14 16:22

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

(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
отвечен Joe Casadonte 2022-11-14 18:39

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх