cursor-movement – ¿Por qué el cursor se mueve al inicio de la línea después<Esc> ?

Pregunta:

He notado que mientras edito a lo largo de una línea en un archivo .txt en el modo de inserción, el cursor se moverá al inicio de la línea después de una escritura usando la secuencia de teclas:

<esc>:w

Me gustaría cambiar este comportamiento de modo que el cursor permanezca en la posición siguiente a: write. es posible? No necesito que el cursor permanezca en el modo de inserción, solo me gustaría que mantuviera su última posición después de una escritura.

Estoy usando gVim 7.4 en Windows. Mi .vimrc es muy básico, no creo que ninguna de mis configuraciones interfiera con este comportamiento. También eliminé el origen de mswin.vim y example.vim de mi .vimrc (incluido con el instalador oficial de Windows de vim.org).

Después de leer los comentarios a continuación, miré el problema nuevamente y me di cuenta de que el cursor solo se desliza hacia el extremo izquierdo después de escribir en líneas que están compuestas completamente por espacios en blanco al final. En otras palabras, el cursor solo se desliza hacia el extremo izquierdo sobre esc-: w cuando la línea es una sangría francesa sin otros caracteres además de los espacios . El .vimrc está manejando comportamientos de sangría con estas configuraciones:

set tabstop=4
set softtabstop=4
set shiftwidth=4
set expandtab
set autoindent 

Entonces, una nueva línea creada debajo de una línea con sangría contendrá 4 espacios en blanco finales como los primeros 4 espacios de la línea (que quiero mantener). Al presionar la tecla 'esc', el cursor se desliza hacia el extremo izquierdo del búfer.

¿Hay alguna manera de retener la posición del cursor al presionar 'esc' para volver al modo normal, en una línea formada por espacios en blanco finales (como sangría)?

Respuesta:

Mirar la documentación para autoindent tiene una respuesta sobre por qué y cómo solucionarlo. :help 'autoindent' :

Copie la sangría de la línea actual cuando comience una nueva línea (escribiendo <CR> en el modo Insertar o cuando use el comando "o" o "O"). Si no escribe nada en la nueva línea excepto <BS> o CTRL-D y luego escribe <Esc> , CTRL-O o <CR> , la sangría se elimina nuevamente. Mover el cursor a otra línea tiene el mismo efecto, a menos que la bandera 'I' esté incluida en 'cpoptions'.

En otras palabras, si desea que no pierda la sangría, escriba algo y luego retroceda antes de presionar Esc , y el espacio inicial permanecerá.

Alternativamente, si solo desea volver al nivel de sangría cuando regrese al modo de inserción y también está usando 'cindent' , use Shift-S en lugar de i , que borrará la línea (ya vacía) y comenzará en el nivel de sangría apropiado. Esta no es una solución tan general como la anterior, pero prefiero esto cuando estoy escribiendo código C, para que mis archivos no se guarden realmente con líneas de solo espacios en blanco.

Leave a Comment

Your email address will not be published. Required fields are marked *

web tasarım