Как прокручивать строки за строкой в ​​GNU Emacs?

Проще говоря, я пытаюсь получить прокрутку в emacs, как в vim и большинстве других редакторов; когда я, например, две строки снизу/сверху, и я нажимаю вниз/вверх (Ctrl - p, n, , ), он идет только по одной строке вверх или вниз, а не на половине экрана.

Ответ 2

Если вы хотите точно расположить экран, вы можете использовать Ctrl-L.

  • По умолчанию он позиционирует текущую строку в середине экрана.

  • ESC 0 Ctrl-L позиционирует текущую строку вверху.

Ответ 3

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

После того, как вы установили его, вы можете добавить следующее в ваш init.el:

(require 'smooth-scrolling)
(smooth-scrolling-mode 1)
(setq smooth-scroll-margin 5)

Последняя строка необязательна; он начинает прокручиваться ближе к краю экрана, чем к нему, поэтому у вас всегда есть немного контекста. Отрегулируйте по вкусу.

Ответ 4

Мое решение состоит не в изменении прокрутки по умолчанию Emac, а в создании команды последовательности клавиш из макроса. Таким образом, у вас есть удобный способ прокрутки одной строки за раз, когда вы хотите. Не идеально, но очень просто. Просто случается, что M- (↓) и M- (↑) доступны, так что я использовал.

Вот как я это сделал. Во-первых, вам нужно записать макрос для прокрутки одной строки вверх и вниз.

Начать макрос

C-x ( 

Прокрутите вниз вниз

C-u 1 C-v

Остановить макрос

C-x )

Для прокрутки вверх, используйте

C-u 1 M-v

Затем вам нужно назвать макрос.

M-x name-last-kbd-macro

Дайте ему имя при появлении запроса:

down-one-line

Затем просто используйте следующее, чтобы привязать последовательность клавиш к имени этой команды:

M-x global-set-key

И при появлении запроса используйте что-то вроде:

M-(down arrow)

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

Вот где я получил эту информацию. Вы также можете найти инструкции ниже и в другом месте о добавлении макроса в файл .emacs.

Здесь для описания определения макроса

Здесь для управления прокруткой

Ответ 5

Я использую их в моем файле .emacs с 2000 года.

(global-set-key (quote [M-down]) (quote View-scroll-line-forward))
(global-set-key (quote [M-up]) (quote View-scroll-line-backward)) 

Таким образом, я могу сохранить поведение по умолчанию Emacs, а также прокручивать одну строку за раз, в зависимости от того, что я делаю.

Это работало, по крайней мере, до GNU Emacs 22. Недавно я обновился до Emacs 24 и обнаружил, что View-scroll-line-forward и View-scroll-line-backward больше недоступны. После некоторой охоты я обнаружил, что прокрутка вверх-вниз и прокрутка вниз-лайн работы. Поэтому, если вы используете Emacs 24, вы можете использовать это.

(global-set-key (quote [M-down]) (quote scroll-up-line))
(global-set-key (quote [M-up]) (quote scroll-down-line)) 

Я в основном пропустил Emacs 23, поэтому, если это версия, которую вы используете, вы можете поэкспериментировать с обоими выше.

Примечание: scroll-up-line фактически прокручивает одну строку вниз, потому что буфер перемещается в одну строку вверх.

Ответ 6

Я перепрограммирую свои клавиши со стрелками для выполнения операций прокрутки.

(global-set-key [up] (lambda () (interactive) (scroll-down 1)))
(global-set-key [down] (lambda () (interactive) (scroll-up 1)))

(global-set-key [left] (lambda () (interactive) (scroll-right tab-width t)))
(global-set-key [right] (lambda () (interactive) (scroll-left tab-width t)))

Ответ 7

Симплины делают это:

(global-set-key [M-up] (lambda () (interactive) (scroll-up 1)))
(global-set-key [M-down] (lambda () (interactive) (scroll-down 1)))

тогда мета-курсор вверх перемещается вверх, а мета-курсор вниз перемещается вниз.

QED. Не уверен, что все вышеперечисленные люди курили!

Ответ 8

У меня есть следующее в моем файле .emacs, чтобы включить приятное ctrl-up, ctrl-down поведение прокрутки. Я также использую это для колесика мыши.

(defun scroll-down-in-place (n)
  (interactive "p")
  (previous-line n)
  (scroll-down n))

(defun scroll-up-in-place (n)
  (interactive "p")
  (next-line n)
  (scroll-up n))

(global-set-key [mouse-4] 'scroll-down-in-place)
(global-set-key [mouse-5] 'scroll-up-in-place)
(global-set-key [C-up] 'scroll-down-in-place)
(global-set-key [C-down] 'scroll-up-in-place)

Ответ 9

M-x customize-variable scroll-conservatively

Установите значение 1.

Вы действительно не хотите этого делать.

Ответ 10

Чтобы прокрутка "vim" помещала это в ваш файл .emacs:

(defun next-line-and-recenter () (interactive) (next-line) (recenter))
(defun previous-line-and-recenter () (interactive) (previous-line) (recenter))
(global-set-key (kbd "C-n") 'next-line-and-recenter)
(global-set-key (kbd "C-p") 'previous-line-and-recenter)

Ответ 11

Если вы ищете быстрый способ создания эффекта прокрутки, введите C-n и C-l последовательно, который перемещает курсор вниз, а затем центрирует его.

Ответ 12

Так как это может раздражать использование M-up, M-down, потому что это мешает org-mode, который перегружает эти команды. Чтобы избежать этой проблемы, я лично использую те команды, которые объединяют M-page-up M-page-down ". Здесь я определил прокрутку вверх и вниз до 1 строки.

;;;scroll by `number-of-lines' without the cursor attached to the screen
(global-set-key [M-prior] (lambda () (interactive) (let ((number-of-lines 1))
                                                  (scroll-down number-of-lines)
                                                  (forward-line (- number-of-lines)))))
(global-set-key [M-next] (lambda () (interactive) (let ((number-of-lines 1))
                                                  (scroll-up number-of-lines)
                                                  (forward-line number-of-lines))))

;;;scroll by `number-of-lines' with the cursor attached to the screen
(global-set-key [S-M-prior] (lambda () (interactive) (let ((number-of-lines 1))
                                                  (scroll-down number-of-lines))))
(global-set-key [S-M-next] (lambda () (interactive) (let ((number-of-lines 1))
                                                  (scroll-up number-of-lines))))

Ответ 13

Если вы запустите emacs в .xsession, в моем случае установка прокрутки-консервативно на 100+ не будет работать, а также прокрутка-шаг 1. Но если u начнет emacs после X, он работает.

Ответ 14

Просто хотел заметить, что строка "emacs init file для интерактивной команды, приведенной jrockaway выше:

M-x customize-variable scroll-conservatively

является

(setq scroll-conservatively 1)

Это работает - по большей части - для меня. Если вы не нажимаете клавишу со стрелкой вверх/вниз слишком долго, вы прокручиваете строку за строкой. Но если вы оставите его нажатым на 3 секунды или более, в какой-то момент вы, скорее всего, увидите, что страница зависла, и курсор подпрыгнул более чем на одну строку. Но затем он вернется к прокрутке в одну строку, как только достигнет конца экрана, прежде чем, возможно, снова прыгнет через случайное количество секунд и т.д.