No vim, quando pressiono ESC
para retornar ao modo de comando, o cursor move um caractere para a esquerda. Isso não é o que eu esperava, ocasionalmente eu batia imediatamente l
para voltar para aquele local, talvez para excluir um personagem.
Existe uma razão para esse comportamento? Isso é conveniente para um padrão de uso que estou ausente?
Respostas:
No modo de inserção, o cursor está entre caracteres ou antes do primeiro ou após o último caractere. No modo normal, o cursor está sobre um caractere (novas linhas não são caracteres para esse fim). Isso é um tanto incomum: a maioria dos editores sempre coloca o cursor entre os caracteres e faz com que a maioria dos comandos atue no caractere depois (não, estritamente falando, abaixo ) do cursor. Talvez isso se deva em parte ao fato de que antes das GUIs, os terminais de texto sempre mostravam o cursor em um caractere (sublinhado ou bloco, talvez piscando). Essa abstração falha no modo de inserção porque isso requer mais uma posição (postagens versus cercas).
A alternância entre os modos deve mover o cursor por meio caractere, por assim dizer. O
i
comando se move para a esquerda, para colocar o cursor antes do caractere que acabou. Oa
comando se move para a direita. Sair do modo de inserção (pressionando Esc) move o cursor para a esquerda, se possível (se estiver no início da linha, é movido para a direita).Suponho que o Esccomportamento meio que faça sentido. Muitas vezes, você está digitando no final da linha e Escsó pode ir para a esquerda. Portanto, o comportamento geral é o comportamento mais comum.
Pense no caractere abaixo do cursor como o último caractere interessante e no comando insert como
a
. Você pode repetir a Escsem mover o cursor, exceto que você encontrará uma posição correta se iniciar no início de uma linha não vazia.fonte
Visualmente, faz mais sentido no gvim:
Ao editar, o cursor está entre os caracteres:
Quando no modo normal, está no topo do último caractere:
Por isso, não realmente voltar um personagem, só de estar entre
r
es
para estar emr
fonte
m
deve permanecer destacou ao voltar ao modo normal ...Esse comportamento é editável conforme a resposta aqui , mas pare e pense no que está acontecendo por um segundo. Quando você está no modo de inserção, você não está realmente sobre um caractere, mas entre eles. Quando você insere algo, o cursor salta para o final do que você inseriu, para que a próxima coisa inserida seja depois disso. Agora pense se você acabou de digitar uma carta e queria fazer alguma coisa. Pressionar Esccolocaria o cursor de seleção diretamente sobre o último caractere que você inseriu. Se não fizesse isso, seria realmente um pouco estranho.
A situação em que você provavelmente está pensando é quando você está no modo de inserção se movendo como se estivesse no modo normal e depois muda. Nesse caso, o cursor parece retornar um caractere, mas se você pensar dessa maneira, isso mostra que você estava no modo de inserção e a última coisa que você fez não foi inserir. Talvez você deva passar mais tempo no modo normal?
fonte
i
eESC
pressionar repetidamente as teclas?i
seguido deESC
é uma funçãoi
e é totalmente independente deESC
; especificamente, quando você pressiona,i
está solicitando ao vim que insira um caractere, o que, por definição, significa "insira um caractere anterior àquele em que eu estou", ao contrário doa
que é "acrescente um caractere depois deste".Digite Alt+ Lpara retornar ao modo de comando.
Não requer nenhuma alteração de remapeamento ou configuração do vim. Funciona porque na maioria dos emuladores de terminal Alt+ KEYenvia um Escseguido por KEY(no xterm, você pode precisar adicionar uma
Xterm*metaSendsEscape: true
linha ao seu arquivo ~ / .Xdefaults). Esse comportamento permite que você "crie" outras combinações de modos de inserção que funcionem diretamente da caixa - como Alt+ Spara Backspace.A propósito, colocar o cursor em cima do personagem que você acabou de escrever pode ser muito inconveniente. Por exemplo, Escdwnão excluirá a palavra após o texto que você acabou de inserir.
fonte
Esc d e
para excluir a palavra na frente. Voltei ao comportamento padrão porque senti que ele havia alterado outros comportamentos já codificados na minha cabeça.Aqui está a minha solução.
É uma versão mais concisa da solução oferecida na página da wikia sobre isso .
fonte