2010-04-17 1 views
15

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

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

Вот что я до сих пор (концентрируясь на движущемся вверх определения):

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

Но это вызывает сообщение об ошибке, когда я ударил С-р, «Неправильный тип аргумента.»

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

Спасибо!

ответ

18

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

Edit: так что я просто пытался и что бы

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

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

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

+3

Да! Спасибо. Я закончил использовать (next-line -5) для предыдущего, так как в руководстве говорится: «Если вы думаете об использовании этого в программе Lisp, подумайте об использовании« прямой линии »с отрицательным аргументом. использовать и более надежно (без зависимости от столбца цели и т. д.) ». –

1

по предупреждению в моем EMACS конфигурации, и комментарий от Питера 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, который принимает комплексное число в качестве аргумента, и может быть использован для навигации во всех 4-х направлениях: P