Как вы перемещаете указатель вверх или вниз по нескольким строкам с помощью Emacs?

Я могу переместить мой указатель вверх и вниз по одной строке с помощью моей клавиши со стрелками, только отлично в Emacs, поэтому я хотел бы переопределить C-n и C-p для перемещения вверх и вниз по 5 строк за раз.

Я только начинаю изучать, как использовать Emacs, и elisp мне очень чуждо. Я попытался использовать ссылку GNU Emacs lisp, но я не мог найти, как связать нажатие клавиши с несколькими командами.

Вот что я до сих пор (сосредоточившись на определении движения):

(global-set-key "\C-p"  '(loop for i in '(1 2 3 4 5) do ('previous-line))) 

Но это вызывает сообщение об ошибке, когда я нажимаю C-p, "Неверный аргумент типа".

Любые предложения?

Спасибо!

Ответы

Ответ 1

Эти функции (я считаю, next-line и previous-line) принимают аргумент optionnal с C-u, поэтому я думаю, что (next-line 5) будет делать то, что вы хотите.

Изменить: поэтому я просто попытался, и это будет

(global-set-key (kbd "C-n")
    (lambda () (interactive) (next-line 5)))

И то же самое с C-p и previous-line.

(Fiew не просто писать код в текстовом поле с клавиатурой телефона ^^)

Ответ 2

в соответствии с предупреждением в моей конфигурации emacs и комментарием от Peter Ajtai, я предлагаю версию, которая использует forward-line из моего init.el

(global-set-key (kbd "C-n")
    (lambda () (interactive) (forward-line  5)))
(global-set-key (kbd "C-p")
    (lambda () (interactive) (forward-line -5)))

Конечно, есть и forward-char, работает одинаково, только в другом направлении.

Единственное, что отсутствует, это complex-forward, который принимает сложное число в качестве аргумента и может использоваться для навигации во всех четырех направлениях: P