2010-04-17 6 views
15

Posso muovere il mio puntatore su e giù una riga con il mio tasto freccia bene in Emacs, quindi mi piacerebbe ridefinire C-n e C-p per muovere su e giù per 5 righe alla volta.Come si sposta il puntatore su o giù più righe con Emacs?

Sto appena iniziando ad imparare come usare Emacs, e l'elisp è molto estraneo a me. Ho provato a utilizzare il GNU Emacs lisp reference, ma non sono riuscito a trovare il modo di associare un tasto a più comandi.

Ecco quello che ho finora (concentrandosi sulla definizione in movimento verso l'alto):

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

Ma, questo porta in primo piano un messaggio di errore quando ho colpito C-p, "tipo di argomento sbagliato."

Qualche suggerimento?

Grazie!

risposta

18

Coloro funzione (credo next-line e previous-line) accetta un argomento Optionnal con C-u, quindi penso che (next-line 5) sarebbe fare quello che vuoi.

Edit: così ho appena provato e che sarebbe

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

E lo stesso con C-p e previous-line.

(Fiew non è semplice scrivere codice in una textarea con una tastiera telefonica ^^)

+3

Sì! Grazie. Ho finito per usare (next-line -5) per precedenti, dal momento che nel manuale dice "Se stai pensando di usarlo in un programma Lisp, considera invece l'uso di' forward-line 'con un argomento negativo. da usare e più affidabile (nessuna dipendenza dalla colonna obiettivo, ecc.). " –

1

secondo l'avvertimento nel mio emacs di configurazione, e il commento di Peter Ajtai, propongo la versione che utilizza forward-line dalla mia init.el

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

Naturalmente c'è anche forward-char, funziona allo stesso modo, solo in una direzione diversa.

L'unica cosa che manca è un complex-forward che prende un numero complesso come un argomento, e può essere utilizzato per navigare nelle 4 direzioni: P