tl; dr: Adicione isso ao seu vimrc para fazer o backspace funcionar como na maioria dos outros programas:
set backspace=indent,eol,start
Resposta mais longa
Embora o comportamento padrão possa ser surpreendente, o backspace "não está funcionando" pode ser considerado um recurso ; isso pode impedir que você remova acidentalmente o recuo e remova muito texto, restringindo-o à linha atual e / ou ao início da inserção.
:help 'backspace'
diga-nos:
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.
Então, o que esses valores significam exatamente?
recuo O
Vim adiciona recuo automático para muitos tipos de arquivos; por padrão, você não tem
permissão para retroceder sobre isso; as regras do que é considerado 'autoindentação' são um pouco sutis, por exemplo, se digitarmos isso (onde █ é o cursor):
if :; then
█
O backspacing não funcionará.
Mas se, então, adicionar um comando e fi
, e voltar a subir, nós estão
autorizados a remover o recuo:
if :; then
█:
fi
Isso ocorre porque no primeiro exemplo, o Vim determinou que ele deveria adicionar 1 nível de recuo quando você pressionou Enter; mas no segundo exemplo, o Vim não identificou nada automaticamente, são apenas caracteres de tabulação ou alguns espaços.
Veja também :help 'autoindent'
eol
Isso deve ser o mais óbvio, pressionar Backspace também remove marcadores EOL ( \n
ou \r\n
); se desativado, o Backspace não fará nada se você tentar excluir um marcador EOL.
start
Isso significa que você pode excluir apenas o texto que inseriu desde que o modo de inserção foi iniciado e não pode excluir nenhum texto inserido anteriormente.
Então, qual é a configuração padrão?
Notei isso usando o GVIM no Windows. O backspace parece funcionar conforme o esperado enquanto estiver usando o VIM do terminal na maioria dos sistemas Linux.
A razão para isso é porque muitas distribuições Linux são fornecidas com arquivos vimrc pré-fabricados, que definem algumas opções comuns. Por exemplo, no meu sistema Arch Linux, tenho /usr/share/vim/vimfiles/archlinux.vim
com:
set nocompatible
set backspace=indent,eol,start
" ... and a few more...
Se você instalar o Vim no Windows, o padrão é usar o vimrc e o gvimrc padrão que o Vim envia.
O padrão do Vim é um valor vazio para backspace
. O Arch Linux, Debian, CentOS ou $other_distro
padrão pode ser diferente.
Modo normal
Esta pergunta é sobre Backspace no modo de inserção, mas deixe-me também adicionar algumas breves observações sobre Backspace no modo normal.
No modo normal, o Backspace age como h
, apenas vai para a esquerda.
Por padrão, o backspace irá para a linha anterior se no início de uma linha (como se eol
estivesse backspace
); você pode controlar esse comportamento com a 'whichwrap'
opção através do b
sinalizador (ativado por padrão).
Você também pode fazer com que o backspace exclua caracteres mapeando-o para o X
comando:
nnoremap <BS> X
X
(e excluído comx
), mas geralmente o que você realmente queria fazer eradb
excluir até o início da palavra oudaw
excluir a palavra inteira etc. Se você tiver backspace disponível, corre o risco de usá-lo. chave subótima em mais casos do que o necessário.