2011-03-17 14 views
8

He seguido la guía en Is there any way in the OS X Terminal to move the cursor word by word? y ahora en el terminal puedo mover el cursor palabra por palabra.Vim en Mac OS X Terminal: mover cursor palabra por palabra

Sin embargo, en Vim, solo puedo retroceder palabra por palabra. No puedo avanzar palabra por palabra, sin importar que configuré \ 033f a option+cursor-right o shift+cursor-right. La única solución que descubrí es ir al modo normal y hacer clic en <w> para pasar a la siguiente palabra. Alguna idea sobre como arreglar eso? Gracias.

+9

'w' en modo normal es la mejor manera de moverse palabra por palabra. – alternative

+1

Puede usar^O en el modo de inserción para ejecutar un comando de modo normal y permanecer en el modo de inserción, como^Ow. –

Respuesta

9

w no es una solución. Es la forma principal de moverse palabra por palabra (ver también: W, b, B, e, E). Lo que quiere es una solución que no le ayudará a aprender Vim en absoluto.

1

Algunos pueden argumentar que moverse con VIM native keyboard shortcuts no es una solución, pero para mí es muy incómodo y muy ineficiente. Especialmente la parte donde necesita cambiar entre el modo insert y el modo normal para pasar a la siguiente palabra.

Es por eso que se me ocurrió una solución basada en this answer en SuperUser. La idea es asignar la entrada proporcionada por el Terminal.app directamente en VIM. La respuesta en SU ​​muestra qué poner en su archivo vimrc para que las teclas Inicio/Final funcionen como se esperaba.

Mi versión modificada a continuación incluye la navegación Option+arrow (o Alt+arrow) en las palabras. Intenté imitar el comportamiento de la Terminal moviéndose lo más cerca que pude. Así que presionar Option+Right (Alt+Right) moverá el cursor al siguiente carácter después de la palabra (en oposición al último carácter de la palabra, que es el comportamiento nativo de VIM w).

let tp=$TERM_PROGRAM 
if tp == 'Apple_Terminal' 
    :" map Mac OS X Terminal.app 

    " map Home/End: 
    :map <ESC>[H <Home> 
    :map <ESC>[F <End> 
    " small 'o' letter in <C-o> means no exit from the insert mode 
    :imap <ESC>[H <C-o><Home> 
    :imap <ESC>[F <C-o><End> 
    :cmap <ESC>[H <Home> 
    :cmap <ESC>[F <End> 

    " map Option+Left/Option+Right: 
    " for this to work you must have the bindings in Settings > Keyboard set 
    " as follows: 
    " 'option cursor left' to '\033b' 
    " 'option cursor right' to '\033f' 
    :map <ESC>f el 
    :imap <ESC>b <C-o>b 
    :imap <ESC>f <C-o>el 
    :cmap <ESC>f el 
endif 

Como una pequeña, pero significativa bono llegue a casa de navegación/Fin sin salir del modo insert. Probado en 10.8.5.

+0

Esto es fantástico, pero he notado que en el modo de inserción recibiré una "l" adicional añadida al movimiento. Ex si el cursor '[x]' .. '[x] foo bar' luego ⌥ ->' tonto [x] barra' -> ⌥ 'folo balr [x]' –

+0

^^ actualizar al anterior. .. acaba de hacer ': imap f e' ... el' l' es innecesario –

1

Déjeme aclarar algunas cosas para usted. Bash (el programa shell que se ejecuta dentro de la terminal) tiene el comportamiento al que estás acostumbrado. (Usando Alt + f para avanzar por palabra, y Alt + b para retroceder por palabra.) Esto fue hecho originalmente para ser como Emacs. Puede usar el comando

set -o vi 

para cambiar al comportamiento de vim. En este modo, puede usar Esc para cambiar al modo normal y moverse como en vim; luego presione i para volver al modo de inserción.

Así que no se sorprendan de que Vim no intente actuar como Emacs. Todo el poder detrás de vim yace detrás de estos simples movimientos.

+0

'-bash: bindkey: comando no encontrado'. No creo que sea un comando estándar. Además de 'Alt + character' se usa a menudo para caracteres acentuados en alfabetos regionales. –

+0

Mi mal. De alguna manera, olvidé que estaba ejecutando zsh. –

Cuestiones relacionadas