Vim en OSX: ¿Cómo hacer página arriba / página abajo / ir a EOL a través de un archivo vim abierto en la terminal?

28

En masilla, que es cómo usé principalmente VIM, podría hacer lo siguiente:

  • Página arriba / abajo: Uso de la tecla nativa Página arriba / abajo. En Mac, la alternativa es Fn + Arriba / Abajo, que no funciona en el terminal (no se desplaza dentro del archivo vim, sino que desplaza el búfer del terminal)
  • Del mismo modo, las teclas Fn + derecha / izquierda no me llevan al inicio / final de línea

¿Cómo emulo esta funcionalidad en Mac OS X?

TCSGrad
fuente
Podría ayudar a aclarar su pregunta si reemplazó o aumentó "Fn + derecha / izquierda" con "Inicio / Fin", que es lo que hacen esas combinaciones de Fn.
Chris Page

Respuestas:

48

Esta no es específicamente una pregunta de mac, esta es realmente una pregunta vi.

En el modo de navegación, ctrl-f desplaza hacia abajo una página y ctrl-b desplaza hacia arriba una página (piense en "F" hacia adelante y "B" ack). Ctrl-d se desplaza hacia abajo media página y ctrl-u se desplaza hacia arriba media página.

^ te lleva al principio de una línea y $ al final. Lo sé, lo sé, pero hay razones históricas para eso.

Aquí hay una muy buena hoja de trucos sobre los controles vi. vi es un poco arcano, pero una vez que lo internalizas, es el editor de texto más rápido y hábil del mundo.

Dan Ray
fuente
1
"Esta no es específicamente una pregunta de mac, esta es realmente una pregunta vi". Se trata principalmente de cómo configurar el mapa de teclas de la aplicación Mac OS X Terminal, pero resulta que la segunda parte de la pregunta, sobre inicio / final de línea, ya tiene un mapeo en Terminal y una posible solución es editar el mapa de vi para entiendelo. Alternativamente, el mapa del teclado de la Terminal podría editarse.
Chris Page
16

Las preferencias predeterminadas de Terminal se asignan Shift- Page Upy Shift- Page Downa las secuencias de caracteres que le dicen a programas como Vim y Emacs que se desplace ( ESC [ 5 ~y ESC [ 6 ~).

Si desea que estas teclas envíen secuencias de caracteres al terminal sin el Shiftmodificador, puede personalizar el mapa del teclado:

Terminal> Preferencias> Configuración> [perfil]> Teclado

Si hace esto, le recomiendo que invierta el significado del Shiftmodificador para estas teclas intercambiando las asignaciones para las teclas desplazadas y no desplazadas, de modo que los comportamientos alternativos aún estén disponibles. Además, consulte el menú Ver , que contiene comandos de desplazamiento que utilizan el Commandmodificador para que estén disponibles independientemente del mapa del teclado del terminal.

Del mismo modo, Shift- Homey Shift- Endse asignan para moverse al inicio / final de la línea actual ( ESC [ Hy ESC [ F). Bash comprende estas secuencias, pero es posible que deba personalizar Vim para comprenderlas o editar las asignaciones específicamente para Vim. Vim, Emacs y algunos otros programas envían una secuencia de escape para poner el terminal en "Modo de cursor de aplicación", donde las teclas Inicio / Fin envían ESC O Hy ESC O F, pero el Terminal (a partir de 10.9) no implementa este comportamiento. Por lo tanto, es posible que desee cambiar el mapa del teclado para enviar estos otros códigos (Bash también los entiende). (En otros sistemas operativos, Homey Endse usan para inicio / final de línea, entonces Terminal les proporciona el Shiftmodificador para la simetría).

Control- Left Arrowy Control- Right Arrowtambién se asignan a las secuencias "mover al inicio / final de línea" de forma predeterminada, aunque son diferentes de las asignadas a Shift- Homey Shift- End. En cambio, se asignan a las secuencias compatibles con Emacs y Bash ESC [ 5 Dy ESC [ 5 C. Suponiendo que estos no estén en uso por Vim, el enfoque más simple sería personalizar Vim para aceptarlos, usando ~ / .vimrc.

Tenga en cuenta que en las versiones más recientes de macOS, Terminal ya no tiene asignaciones explícitas para Homey Enden las preferencias de forma predeterminada. En cambio, tiene un comportamiento dinámico en el que las teclas se asignan automáticamente al inicio / fin de línea cuando la pantalla alternativa está activa, por ejemplo, cuando se usa una aplicación de pantalla completa como emacs, vim, screen o tmux. Cuando se utiliza un programa orientado a líneas como un shell en la pantalla principal, continúan desplazando la vista de terminal de forma predeterminada. El Shiftmodificador invierte el comportamiento.

Chris Page
fuente
@ MarkHu Cubrí eso en el último párrafo.
Chris Page
Como se cubre parcialmente en el último párrafo, los valores predeterminados pueden ser diferentes / faltantes en otras versiones de MacOS. Para 10.13.6, tuve que agregar \033[5~(y ... 6.) Para PageDown / Up.
MarkHu
2

La mejor y más fácil solución es n+ , donde nes el número de líneas que le gustaría bajar, y es la tecla hacia abajo.

Regularmente solo hago 12+ y 22+ .

T.Woody
fuente
1

Estaba acostumbrado a Inicio / Fin, llevándome al inicio y al final de las líneas en modo Insertar (desde el uso en Windows y creo que Linux), que Mac no admite. Esto es particularmente molesto porque cuando estoy usando vim en un sistema remoto, tampoco puedo hacerlo fácilmente. Después de una prueba y error dolorosa, se me ocurrieron algunas .vimrclíneas que hacen lo mismo, y finalmente encontré a otra persona que encontró una solución similar aquí:

https://coderwall.com/p/fd_bea

Disfrutar.

:inoremap <C-e> <C-o>$
:inoremap <C-a> <C-o>0
usuario1442960
fuente