tl; dr: agregue esto a su vimrc para que el espacio de retroceso funcione como en la mayoría de los otros programas:
set backspace=indent,eol,start
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:
Influences the working of `<BS>`, `<Del>`, `CTRL-W` and `CTRL-U` in Insert
mode. This is a list of items, separated by commas. Each item allows
a way to backspace over something:
value effect
indent allow backspacing over autoindent
eol allow backspacing over line breaks (join lines)
start allow backspacing over the start of insert; CTRL-W and CTRL-U
stop once at the start of insert.
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):
if :; then
█
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:
if :; then
█:
fi
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 ( \no \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?
Me di cuenta de esto usando GVIM en Windows. Sin embargo, el retroceso parece funcionar según lo esperado mientras se usa VIM desde el terminal en la mayoría de los sistemas Linux.
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.vimcon:
set nocompatible
set backspace=indent,eol,start
" ... and a few more...
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_distropredeterminado 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 eolestuviera en backspace); Puede controlar este comportamiento con la 'whichwrap'opción a través del bindicador (habilitado de forma predeterminada).
También puede hacer que los caracteres de eliminación de retroceso se asignen al Xcomando:
nnoremap <BS> X
X(y eliminar conx), pero a menudo lo que realmente quería hacer era,dbpor ejemplo, eliminar hasta el comienzo de la palabra, odaweliminar la palabra completa, etc. Si tiene retroceso disponible, corre el riesgo de usar esto clave subóptima en más casos de los necesarios.