2010-04-17 31 views
15

Puedo mover el puntero hacia arriba y hacia abajo una línea con mi tecla de flecha en Emacs, por lo que me gustaría redefinir C-n y C-p para subir y bajar 5 líneas a la vez.¿Cómo se mueve el puntero hacia arriba o hacia abajo de varias líneas con Emacs?

Estoy empezando a aprender a usar Emacs, y elisp es muy extraño para mí. Intenté usar el GNU Emacs lisp reference, pero no pude encontrar cómo vincular una pulsación de tecla a varios comandos.

Esto es lo que tengo hasta ahora (concentrándose en la definición subiendo):

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

embargo, esto trae un mensaje de error cuando golpeo C-p, "tipo de argumento incorrecto."

¿Alguna sugerencia?

Gracias!

Respuesta

18

Esas funciones (creo que next-line y previous-line) aceptan un argumento opcional con C-u, así que creo que (next-line 5) haría lo que usted quisiera.

Editar: por lo que he intentado y que sería

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

Y lo mismo con C-py previous-line.

(Fiew no es sencillo para escribir código en un área de texto con un teclado de teléfono ^^)

+3

Sí! Gracias. Terminé usando (next-line -5) para anterior, ya que en el manual dice "Si estás pensando en usar esto en un programa Lisp, considera usar' forward-line 'con un argumento negativo en su lugar. Generalmente es más fácil para usar y más confiable (sin dependencia de la columna de objetivos, etc.) ". –

1

según la advertencia en mi emacs config, y el comentario de Peter Ajtai, propongo la versión que utiliza forward-line de mi init.el

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

por supuesto también hay forward-char, funciona de la misma, solo en una dirección diferente.

La única cosa que falta es un complex-forward que toma un número complejo como un argumento, y se puede utilizar para navegar en las 4 direcciones: P

Cuestiones relacionadas