Aunque hay trucos para manejar esto (como las ESC asignaciones 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. En concreto, dada la cadena abcDefg
con el cursor en la D
:
Si pulsa i, la ubicación modo de inserción será entre el c
y D
. Un normal ESC pondrá el cursor en c
; <C-O>:stopinsert<CR>
(o el método de retroceso) colocará el cursor en D
.
Si pulsa un, la ubicación modo de inserción será entre el D
y e
. Un normal ESC pondrá el cursor en D
; <C-O>:stopinsert<CR>
pondrá el cursor en e
.
Si realmente quiere hacer esto, se podía eludir 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: recuerde que esto sólo se ocupará de i
y a
como métodos de entrada: si use el modo de bloque visual, I
, o A
o lo que sea, tendrá que encontrar nuevos comandos para que coincidan (y hay muchos de ellos). Por lo tanto, recomiendo encarecidamente que no hagas esto.
Personalmente, recomendaría acostumbrarme al comportamiento predeterminado. Puede hacer que sea lógico para i
O lógico para a
. Si cambia el valor predeterminado a lógico para i
a expensas de lo lógico para a
, se confundirá cuando use una instalación estándar de vi/vim.
pregunta interesante. Me pregunto cuál es la razón detrás de este comportamiento. Lo acabo de aceptar. –
Lo probé. Es un poco incómodo. Con el cursor en movimiento, puedo * ver * si dejo el modo de edición. –
@StefanoBorini Hay una parte de la explicación en [esta pregunta aquí] (http://stackoverflow.com/questions/3676388/cursor-positioning) en SO. Según lo entiendo: cuando salgas del modo Insertar, vi no sabe si ingresaste usando 'a' o' i', por lo que asume 'a'. Y realmente: el cursor no se "desliza" cuando se usa 'a' y Esc repetidamente. –