salir cómo con comandos buscar archivo vim cursor-position

vim - cómo - salir del editor vi



Evite que el cursor retroceda un carácter en la salida del modo de inserción (5)

Aunque hay trucos para manejar esto (como las asignaciones de ESC mencionadas en las dos publicaciones anteriores), no hay una forma consistente de hacerlo. La razón es que no hay forma de determinar el método que se usó para ingresar al modo de inserción. Específicamente, dada la cadena abcDefg con el cursor en la D :

  • Si presiona i , la ubicación del modo de inserción estará entre c y D Un ESC normal colocará el cursor sobre c ; <CO>:stopinsert<CR> (o el método de retroceso) colocará el cursor en D

  • Si presiona a , la ubicación del modo de inserción estará entre D y e . Un ESC normal colocará el cursor sobre D ; <CO>:stopinsert<CR> pondrá el cursor sobre e .

Si REALMENTE quieres hacer esto, podrías mezclarlo con algo como esto:

let insert_command = "inoremap <ESC> <C-O>:stopinsert<CR>" let append_command = "iunmap <ESC>" nnoremap i :exe insert_command<CR>i nnoremap a :exe append_command<CR>a

PERO: recuerda que esto solo tratará con i y a como métodos de entrada: si usas el modo de bloque visual, I , o A o lo que sea, necesitarás encontrar nuevos comandos para que coincidan (y hay una gran cantidad de ellos). Por lo tanto, recomiendo encarecidamente que no hagas esto.

Personalmente, recomendaría acostumbrarme al comportamiento predeterminado. Puedes hacer que sea lógico para i O lógico para a . Si cambia la configuración predeterminada a lógica para i a expensas de la lógica para a , se confundirá cuando use una instalación estándar de vi / vim.

...¿como lo harias?

tarea para obtener crédito adicional: encuentre una forma de forzar a vim a actualizar la posición del cursor inmediatamente después de salir del modo insertar


Aunque no recomendaría cambiar la mecánica predeterminada del cursor, una forma de lograr el comportamiento en cuestión es utilizar la siguiente asignación de modo Insertar.

:inoremap <silent> <Esc> <Esc>`^

Aquí la tecla Esc está sobrecargada en modo Insertar para ejecutar adicionalmente el comando `` ^ `que mueve el cursor a la posición donde estaba la última vez que se detuvo el modo Insertar. Dado que en este mapeo se ejecuta inmediatamente después de salir del modo Insertar con Esc , el cursor deja un carácter a la derecha en comparación con su posición con el comportamiento predeterminado.

A diferencia de algunas otras soluciones, esta no requiere que Vim se compile con la función +ex_extra .


Creo que la forma correcta de hacerlo es

au InsertLeave * call cursor([getpos(''.'')[1], getpos(''.'')[2]+1])


Qué pasa:

:imap <Esc> <Esc><Right>


inoremap <silent> <Esc> <C-O>:stopinsert<CR>

en tu .vimrc