No vim, impedir que o cursor se mova de volta quando eu sair do modo de edição?

8

No vim, se eu entrar e sair do modo de edição sem fazer nada, o cursor ficará com um caractere à esquerda. E se eu entrar e sair do modo append, o cursor se move para frente e depois para trás.

Existe alguma maneira de configurar o vim para deixar o cursor sozinho nesses casos?

Idealmente, eu só quero sempre entrar no modo append, mas sem mover o cursor quando eu entrar ou sair do modo.

(Atualmente eu geralmente uso o modo de inserção porque ele não atrapalha a posição do meu cursor ao entrar. Isto é, exceto quando eu preciso acrescentar ao final da linha, nesse caso eu juro pelo vim por se comportando de maneira tão arcaica, pressione Esc e entre no modo append.)

    
por RomanSt 07.01.2011 / 01:52

4 respostas

8

Essa pergunta é feita com frequência entre os novos usuários do vi / Vim, e a resposta é que, enquanto no modo normal, o cursor está sempre "ligado" a um caractere, mas no modo de inserção o cursor está sempre "entre" dois caracteres , o fim-de-linha é um personagem). Você não pode realmente ver isso ilustrado também no console Vim, mas na GUI você notará que o cursor se torna uma barra entre dois caracteres quando você entra no modo de inserção, em vez de um bloco sobre um caractere quando você está no modo normal.

Então, o que você está vendo não é necessariamente o cursor movendo um caractere de volta quando você sai do modo de inserção, mas apenas movendo-se para um caractere. A única direção segura do movimento é para a esquerda (ou para trás). Assim, você tem mais de uma maneira de inserir o modo de inserção:

  • "a" entra no modo de inserção com o cursor "entre" o caractere em que o cursor estava e o próximo caractere à direita.
  • "i" entra no modo de inserção com o cursor "entre" o caractere em que o cursor estava e o caractere anterior à esquerda.

Algumas pessoas têm se esforçado para suprimir esse "movimento" de que não gostam, mas isso inevitavelmente interfere em plugins e outros scripts do Vim que eles querem executar no futuro.

Minha sugestão é me acostumar a usar os comandos "a" e "i" (e "A" e "I") nas circunstâncias apropriadas.

Os comandos "o" e "O" também são úteis para aprender. Veja:

:help a
:help i
:help A
:help I
:help o
:help O

Editar: Se você ainda está determinado a mudar esse comportamento, tente esta dica: Impedir o escape de mover o cursor um caractere para o esquerda

    
por 07.01.2011 / 02:34
1

Eu acho que por quilate você quer dizer seu cursor e se você estiver usando "i" isso irá inserir diretamente onde seu cursor está, "a" (que eu acredito que você está procurando) move o cursor um caractere para a direita. Além disso, shift-i (I) irá para o início da linha e shift-a (A) irá até o final da linha.

Se eu entendi mal sua pergunta, peço desculpas.

    
por 07.01.2011 / 02:21
1

Como o remapeamento de <ESC> é considerado "arriscado", eu apenas combino com uma das abordagens Evitar a chave de escape e tenho o seguinte no meu .vimrc :

 inoremap ii <ESC>l

Nota: certifique-se de que não haja caracteres de espaço no final da linha.

Simples, mas totalmente certificado como "funciona bem para mim", como é exatamente o que eu teria que digitar à mão.

Se eu uso a ou i ainda recebo o comportamento de recuo do cursor e me incomoda o mais frequentemente do que não, então a próxima coisa que quero digitar é d$ para excluir ao final de uma linha, etc.

    
por 26.06.2012 / 15:03
1

Aqui está minha solução:

au InsertLeave * call cursor([getpos('.')[1], getpos('.')[2]+1])

É engraçado. Essa mesma pergunta existe em todos os três sites: SO, SU, Unix + Linux.

    
por 12.06.2013 / 00:06

Tags