vim emacs navigation cursor-position

Emacs equivalente de shift-h y shift-l de vim



navigation cursor-position (6)

Me pregunto si emacs tiene estos comandos de movimiento del cursor integrados o si voy a tener que escribirlos o encontrar un fragmento en algún lugar. Los encuentro bastante elegantes y los uso en vim regularmente. No los he encontrado en la documentación de Emacs hasta ahora.

en resumen, se ven así: shift-h -> mover el cursor a la parte superior de la pantalla shift-m -> mover el cursor a la mitad de la pantalla shift-l -> mover el cursor a la parte inferior de la pantalla

solo para aclarar, no busco mover el cursor a la parte superior / inferior del documento, solo a la parte superior / inferior de la parte actualmente visible del documento, es decir, la parte que se muestra actualmente en la pantalla.

Encontré uno de ellos hasta ahora. alt-r parece ser el equivalente de shift-m de vim. mueve el cursor a la primera columna de la línea media.


Descubrí que la línea de move-to-window-line no respeta window-buffer-height . Por lo tanto, en realidad no proporciona el comportamiento que tiene Vim cuando el tamaño del búfer es más pequeño que la ventana. Como no uso Emacs desde un terminal, ni me importa minimizar su marco, elegí reutilizar su clave de prefijo porque la ''z'' me recuerda a los zt , zm y zb de Vim (y también porque yo '' Voy a usar lo siguiente en combinación con el Cl Emacs para lograr el mismo efecto general).

(define-prefix-command ''ctl-z-map) (defun move-to-window-line-top () (interactive) (move-to-window-line 0)) (defun move-to-window-line-middle () (interactive) (let* ((wb-height (window-buffer-height (get-buffer-window))) (actual-height (if (> wb-height (window-height)) (window-height) wb-height))) (move-to-window-line (/ actual-height 2)))) (defun move-to-window-line-bottom () (interactive) (move-to-window-line -1) (beginning-of-line)) (define-key ctl-z-map (kbd "h") ''move-to-window-line-top) (define-key ctl-z-map (kbd "m") ''move-to-window-line-middle) (define-key ctl-z-map (kbd "l") ''move-to-window-line-bottom) (global-set-key (kbd "C-z") ''ctl-z-map)


En Emacs 23.2, Mr hace exactamente lo que quieres.

La primera invocación de este comando mueve el punto al centro de la ventana actualmente visible, las siguientes invocaciones sucesivas se mueven hacia arriba y hacia abajo.

No requiere configuración adicional o funciones personalizadas.


La función que desea utilizar es move-to-window-line , cuya definición es:

move-to-window-line is an interactive built-in function in `C source code''. It is bound to M-r. (move-to-window-line arg) Position point relative to window. With no argument, position point at center of window. An argument specifies vertical position within the window; zero means top of window, negative means relative to bottom of window.

Lo llamaría con un 0 para ir al principio de la página y un -1 para ir al final de la página. Estos pueden vincularse a una clave con una función anónima o una función con nombre. Se dan ejemplos de ambos.

Funciones anonimas

(global-set-key [(f4)] (function (lambda () "Go to top of page." (interactive) (move-to-window-line 0)))) (global-set-key [(f4)] (function (lambda () "Go to bottom of page." (interactive) (move-to-window-line -1))))

Funciones nombradas

(defun my-top-of-page () "Go to top of page." (interactive) (move-to-window-line 0)) (defun my-bottom-of-page () "Go to bottom of page." (interactive) (move-to-window-line -1)) (global-set-key [(f4)] ''my-top-of-page) (global-set-key [(shift f4)] ''my-bottom-of-page)


Para agregar a las respuestas de Joe y Dave, puedes enfadarte con:

(defun bp-goto-center() "move cursor to middle line" (interactive) (move-to-window-line (/ (window-height) 2)))

(Agrego bp al frente de todas mis funciones para distinguirlas de las integradas, o de otras personas ... siéntete libre de eliminar eso).


Si está utilizando Emacs 23, es simplemente Cl . La primera vez que irá al centro, la segunda vez que irá a la parte superior, la tercera vez que irá a la parte inferior.

EDITAR:

Vaya, mi mal, eso pone la línea actual en el centro / arriba / abajo de la ventana. Aún así es útil :)


Utilizar:

  • Alt+0 Alt+r - parte superior de la ventana
  • Alt+- Alt+r - parte inferior de la ventana

Estrictamente, estos deben escribirse como M-0 Mr para la parte superior de la pantalla y M-- Mr para la parte inferior de la pantalla. Donde M significa la tecla Meta que generalmente se asigna a Alt .

Trabajé estas pulsaciones de la siguiente manera:

Mr ejecuta el comando move-to-window-line . Descubrí esto con Ch k Mr , es decir. Ctrl+h , k , Alt+r . La secuencia de teclas Ch k significa decirme qué hace la siguiente secuencia de teclas. Me dijo el nombre del comando y también que puede pasar argumentos numéricos al comando para seleccionar la línea a la que desea ir. Si no pasa ninguno, mueve el punto al centro de la ventana como lo ha visto.

Para pasar los argumentos numéricos a los comandos, escribe un número mientras mantienes presionada la tecla Meta . Un signo menos en sí mismo se toma para significar -1. Ahora, para pasar a la parte superior de la pantalla queremos pasar la línea 0 y para la parte inferior de la línea -1. Esto nos da las secuencias de teclas anteriores.

Si desea vincular la línea de move-to-window-line a una clave diferente, observe la respuesta de Joe a esta pregunta .