Intentar eliminar caracteres en modo insertar con la backspacetecla a veces no parece funcionar. A backspace veces puedo , pero otras veces no hace nada; el cursor no se mueve hacia la izquierda y no parece suceder absolutamente nada.
Me di cuenta de esto usando gVim en Windows. El backspaceparece funcionar como se espera durante el uso de Vim de la terminal en la mayoría de los sistemas Linux sin embargo.
- ¿Por qué pasó esto?
- ¿Cómo puedo hacer que la backspacetecla elimine caracteres como de costumbre?
- ¿Este comportamiento pretende ser una característica? En otras palabras: ¿hay mejores alternativas backspacepara eliminar caracteres en modo de inserción?
insert-mode
glS
fuente
fuente
X
(y eliminar conx
), pero a menudo lo que realmente quería hacer era,db
por ejemplo, eliminar hasta el comienzo de la palabra, odaw
eliminar la palabra completa, etc. Si tiene retroceso disponible, corre el riesgo de usar esto clave subóptima en más casos de los necesarios.J
que también cuida los espacios en blanco. En resumen, el retroceso está bien para corregir errores tipográficos rápidamente durante la escritura, pero aparte de eso, hay mejores alternativas.:h vim-faq
y buscar/backspace
. La etiqueta difícil de memorizar es:h faq-12.26
.Respuestas:
tl; dr: agregue esto a su vimrc para que el espacio de retroceso funcione como en la mayoría de los otros programas:
Respuesta más larga
Aunque el comportamiento predeterminado puede ser sorprendente, el retroceso "no funciona" puede considerarse una característica ; puede evitar que elimine accidentalmente la sangría y que elimine demasiado texto al restringirlo a la línea actual y / o al inicio de la inserción.
:help 'backspace'
Cuéntanos:Entonces, ¿qué significan exactamente estos valores?
sangría
Vim agrega sangría automática para muchos tipos de archivos; de forma predeterminada, no puede retroceder sobre esto; las reglas de lo que se considera 'autoindentación' son algo sutiles, por ejemplo, si escribiéramos esto (donde █ es el cursor):
El retroceso no funcionará.
Pero si queremos a continuación, añadir un comando y el
fi
, y volver a subir, nos estamos autorizados a retirar la muesca:Esto se debe a que en el primer ejemplo, Vim determinó que debería agregar 1 nivel de sangría cuando presionó Enter; pero en el segundo ejemplo, Vim no autoindentó nada, solo son caracteres Tab o algunos espacios.
Ver también
:help 'autoindent'
eol
Esto debería ser lo más obvio, al presionar Retroceso también se eliminan los marcadores EOL (
\n
o\r\n
); si está desactivado, Retroceso no hará nada si intenta eliminar un marcador EOL.inicio
Esto significa que solo puede eliminar el texto que ha insertado desde que comenzó el modo de inserción, y no puede eliminar ningún texto que se haya insertado previamente.
Entonces, ¿cuál es la configuración predeterminada?
La razón de esto es porque muchas distribuciones de Linux se envían con archivos vimrc prefabricados que establecen algunas opciones comunes. Por ejemplo, en mi sistema Arch Linux que tengo
/usr/share/vim/vimfiles/archlinux.vim
con:Si instala Vim en Windows, el valor predeterminado es usar los valores predeterminados vimrc y gvimrc con los que se incluye Vim.
El valor predeterminado de Vim es un valor vacío para
backspace
. Arch Linux, Debian, CentOS o el$other_distro
predeterminado pueden ser diferentes.Modo normal
Esta pregunta es sobre Retroceso en modo de inserción, pero permítanme agregar algunas breves observaciones sobre Retroceso en modo normal.
En modo normal, el Retroceso actúa como
h
, solo va hacia la izquierda.Por defecto, el retroceso irá a la línea anterior si al comienzo de una línea (como si
eol
estuviera enbackspace
); Puede controlar este comportamiento con la'whichwrap'
opción a través delb
indicador (habilitado de forma predeterminada).También puede hacer que los caracteres de eliminación de retroceso se asignen al
X
comando:fuente
"_X
sería un comportamiento "más natural"<BS>
.En caso de que alguien tenga experiencia que no sea un
<BS>
comportamiento explicable al usar ConEmu en Windows, es posible que deba reasignar la<BS>
clave para:Más información
fuente
se usa con v5.4 y versiones anteriores. funcionó para mí en mac.
Parece que en Mac tengo v3.2:
Todas las versiones anteriores a la 3.2 usan la GNU General Public License v3 (GPLv3), que Apple no está a favor de admitir. Una discusión sobre reddit sobre esto está aquí .
Puede actualizar al Bash más nuevo con:
Esto permite aprovechar la finalización programable resaltada aquí .
fuente
Si
set backspace=indent,eol,start
es la última línea de suvimrc
, ninguna de las soluciones funcionará.Agregue una regla más después de esto, por ejemplo:
fuente