backspaceÀs vezes, tentar excluir caracteres no modo de inserção com a tecla parece não funcionar. backspace Às vezes posso , mas outras vezes não faz nada; o cursor não vai para a esquerda e absolutamente nada parece acontecer.
Notei isso usando o gVim no Windows. No backspaceentanto, parece funcionar como esperado enquanto você usa o Vim do terminal na maioria dos sistemas Linux.
- Por que isso acontece?
- Como posso fazer com que a backspacechave exclua caracteres como de costume?
- Esse comportamento pretende ser um recurso? Em outras palavras: existem alternativas melhores backspacepara excluir caracteres no modo de inserção?
insert-mode
glS
fonte
fonte
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.J
que também cuida dos espaços em branco. Em resumo, o backspace é adequado para correções rápidas de erros de digitação durante a gravação, mas, além disso, existem alternativas melhores.:h vim-faq
e pesquisar/backspace
. A tag difícil de memorizar é:h faq-12.26
.Respostas:
tl; dr: Adicione isso ao seu vimrc para fazer o backspace funcionar como na maioria dos outros programas:
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: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):
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: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?
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: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
estivessebackspace
); você pode controlar esse comportamento com a'whichwrap'
opção através dob
sinalizador (ativado por padrão).Você também pode fazer com que o backspace exclua caracteres mapeando-o para o
X
comando:fonte
"_X
seria um comportamento "mais natural" para<BS>
.Caso alguém tenha um
<BS>
comportamento não explicável usando o ConEmu no Windows, talvez seja necessário remapear a<BS>
chave para:Mais Informações
fonte
é usado com a v5.4 e anterior. trabalhou para mim no mac.
parece que no mac eu tenho a v3.2:
Todas as versões anteriores à 3.2 usam a Licença Pública Geral GNU v3 (GPLv3), que a Apple não é a favor do suporte. Uma discussão no reddit sobre isso está aqui .
Você pode atualizar para o Bash mais recente com:
isso permite tirar proveito da conclusão programável destacada aqui .
fonte
Se
set backspace=indent,eol,start
for a última linha da suavimrc
, nenhuma das soluções funcionará.Adicione mais uma regra depois disso, por exemplo:
fonte