Posso fazer o vim alterar o comportamento do cursor?

11

Uso o vim há alguns anos como editor secundário, mas por várias razões, me vejo usando cada vez mais, mesmo quando meu editor principal está disponível. Um problema que sempre me incomodou vime que me impede de usá-lo mais é a maneira como ele lida com o posicionamento do cursor. O cursor pode estar apenas em um caractere, e não entre caracteres, como seria o caso de qualquer editor criado desde 1984.

Para apenas um exemplo de por que isso é um problema, se eu quiser excluir a última palavra de uma linha, pressionei $para ir até o final da linha e depois dbpara excluir para trás. Isso deixa um caractere a ser excluído, porque realmente$ não foi até o final da linha, foi para o último caractere da linha e excluiu apenas o que estava antes do caractere atual. O problema não é que eu tenho que digitar um caractere extra, é o pensamento extra envolvido em fazer o que deveria ser simples, o que distrai minha atenção do que estou realmente tentando realizar.db

Parece-me que o posicionamento mais moderno do cursor da ideia é superior em todos os vimaspectos , e eu gostaria de mudar para usar essa abordagem. Tenho certeza de que alguns vimfãs do núcleo discordam da minha opinião sobre isso, mas como um dos argumentos padrão para vima superioridade é sua infinita configurabilidade:

  • pode entregar neste caso?
  • Pode vimser feito para colocar o cursor entre os caracteres?
iconoclasta
fonte
2
Parece que você está procurando o Insertmodo ou perdendo o ponto de normalmodo. Eu faria $dawou $bdwexcluir a última palavra em uma linha no modo normal. No Insertmodo que eu faria A<Ctrl-w>.
Jw013
3
Para o registro, como alguém que está assustado com a própria idéia de um submundo "entre os personagens", a sequência de teclas correta para apagar a última palavra sobre a linha atual é$bD
Alan Curry
1
Usar um mouse não é o ideal, mas as ineficiências significativas surgem quando você precisa parar e pensar em como fazer o que deseja fazer. O que é precioso não é um segundo aqui e ali, mas o foco . Quando você perde o foco, perde muito mais do que alguns segundos.
Iconoclast
2
A partir dos comentários até agora, parece que a resposta para a pergunta é "Não, esse modelo de movimento do cursor está irrevogavelmente incorporado ao design do vim e não pode ser alterado." Isso está correto?
Iconoclast
2
@iconoclast Essa é a minha conclusão também. Até onde eu sei, é impossível no vi ou no vim tratar todos os caracteres de uma linha de maneira uniforme; sempre há uma exceção para o primeiro ou o último caractere.
Gilles 'SO- stop be evil'

Respostas:

5

Você pode :set virtualedit+=onemore, o que permite que você passe o último caractere. Infelizmente para você, $ainda vai para o último personagem; você tem que passar o mouse para passar por isso. Por outro lado, você pode usar g$, que normalmente vai para o último caractere da linha da tela em uma linha que envolve; no onemoremodo, ele também passa o último caractere de uma linha não quebrada (ou a última linha da tela de uma linha quebrada).

:h 'virtualedit' diz que esta opção pode atrapalhar os scripts, mas não sei qual é o grande risco na realidade.

echristopherson
fonte