Vim mueve el cursor un caracter en modo insertar sin teclas de flecha

8

Esto puede parecer un poco exagerado, pero cambié a vim y ahora estoy muy contento con el flujo de trabajo. Intento disciplinarme para no usar las teclas de flecha, ya que mantener las manos en las teclas alfa todo el tiempo es algo muy importante al escribir. Entonces, cuando necesito navegar, salgo del modo de inserción, me muevo en modo normal y vuelvo al modo de inserción.

Hay una excepción en la que esto es realmente más perturbador: lo uso clang completecon fragmentos y super tabes genial. Excepto cada vez que obtengo una función que se completa automáticamente después de completar los parámetros, me quedo con el cursor antes, )así que para continuar tengo que mover el cursor un carácter hacia la derecha. Como puedes imaginar, esto sucede muy a menudo .

Las únicas opciones que tengo (que yo sepa) son: Esclao , y no estoy contento con ninguna de ellas. La primera me hace presionar 3 teclas para un simple movimiento del cursor de 1 carácter, la segunda me hace mover mi mano a las teclas de flecha. Una tercera opción sería mapear CTRL-Lo hacer algo .

Entonces, ¿cuál es la mejor manera de hacer esto?


//snippets (clang complete + supertab):
foo($`param1`, $`param2`)

//after completion:
foo(var1, var2|)
              ^ ^
              | |
     I am here  |
                 Need to be here

| denota la posición del cursor

bolov
fuente
Con un problema similar, terminé hackeando el script de finalización para que no se repita )si hay al menos un argumento en la función. Entonces lo escribo a mano. Mucho más útil ahora.
Dmitry Frank
Lo que sucede cuando escribes ), apuesto a que se salta sin insertar realmente. (No uso este complemento)
FDinoff
@FDinoff no, simplemente inserta otro)
bolov
1
@bolov eso es decepcionante. Es posible que pueda extraer el código que hace eso de los pares automáticos . No tengo idea si los complementos entrarán en conflicto con ellos. La otra opción es usar <C-O>lpara salir al modo normal para 1 comando de modo normal.
FDinoff

Respuestas:

5

Mapa )para omitir el existente )si es un paréntesis de cierre

inoremap <expr> )  strpart(getline('.'), col('.')-1, 1) == ")" ? "\<Right>" : ")"

Tomado de: http://vim.wikia.com/wiki/Automatically_append_closing_characters


Vieja respuesta

:h i_CTRL-O ejecute un comando, regrese al modo Insertar.

Ctrl-ol te moverá un personaje a la derecha y luego te regresará al modo de inserción.

Alternativamente, algunos de los complementos de soporte le permiten simplemente escribir el soporte de cierre )y anularán el existente.

Brett Y
fuente
1
esto no funciona si )es el último carácter en la línea (y esto sucede a menudo cuando escribe código). CTRL-O aSin embargo funciona. Así que supongo que guardamos una clave. :)
bolov
Verdadero del )tiene solo dos caracteres y siempre lo colocará después del paréntesis de cierre.
Brett Y
saltar sobre el ')' funciona de
maravilla
0

Escriba lo siguiente para buscar las teclas de control que se utilizan en el modo de inserción.

:help insert-index

ctrl-b no se usa, pero es posible que desee sacrificar alguna otra clave.

imap <c-b> <right>

Esto funciona para mover el cursor hacia la derecha un carácter. O mapear algunos caracteres dobles.

imap jj <right>
escoba
fuente