TL; DR; versão - Como desfazer o texto que foi colado no meu buffer de cópia do SO sem desfazer outro texto digitado desde que entrei no modo de inserção?
Descrição mais longa:
- Coloque algo no buffer de cópia do SO (por exemplo, destaque algum texto e faça
Command-c
no Mac) - Entre no modo de inserção no vim (
i
) - Digite algo (por exemplo
asdf
) - Sem sair do modo de inserção, cole do seu buffer de cópia no vim (
Command-v
no Mac) - Acertar
escape
- Tente desfazer a pasta (
u
)
Desfaz tudo desde a última vez em que você entrou no modo de inserção. Em outras palavras, ele é limpo asdf
e todo o texto em que colei.
Como faço para apenas desfazer o texto que colou em? Preciso sempre sair do modo de inserção e voltar antes de colar o texto apenas para ter a opção de desfazer o texto colado?
:h i_CTRL-G_u
(por exemplo, "quebrar desfazer sequência, iniciar nova alteração" no modo de inserção).No MacVim, você precisa remover o mapeamento do
Edit > Paste
item de menu para substituir o atalho e, em seguida, pode remapear o Cmd-V (D-v
na linguagem MacVim) para o comando apropriado em cada modo. Eu adicionei isso ao meu~/.gvimrc
e agora tudo funciona maravilhosamente:O
<C-g>u
é necessário apenas no modo de inserção para corrigir o histórico de desfazer; onoremap
ecnoremap
são simplesmente para restaurar o comportamento pasta padrão nos modos normal e de comando.Agradeço a Ingo Karkat por me indicar a direção certa aqui.
fonte
Na verdade, a solução é que você precisa primeiro entrar no modo de comando (por exemplo Esc) e entrar novamente no modo de inserção, mas só funciona se eu digitar manualmente, mas parece "aleatoriamente" parar de funcionar se eu testá-lo
~/.vimrc
. O Google não ajuda em nada.Gasto muito tempo tentando corrigir esse problema e apenas descobri o motivo no meu caso:
Não mapeie a chave de colar da mesma forma que a chave de colar existente no terminal
por exemplo, Ctrl+Shift+Virá colar no meu terminal Konsole, mas se eu atribuir esta chave
<C-S-v>
no~/.vimrc
, o "undo por apenas pasta única, em vez de múltiplas pastas" não vai funcionar.No meu caso, eu tenho que usar em
<C-v>
vez de<C-S-v>
:Seu caso pode ser diferente, mas o ponto é o mesmo: não atribua os mesmos conflitos de chave de colar com a chave de emulador de terminal existente.
Eu provei 100% dessa conclusão definindo minha chave de colar terminal Ctrl+Ve agora
<C-v>
paro de funcionar, mas está<C-S-v>
funcionando.Observe também que o vim é muito sensível e estranho. Eu acho que preciso usar
i
e, em seguida, 2 teclas direitas manualmente para fazê-lo funcionar na posição correta do cursor, isso significa que eu tenho que colocari
e 2 teclas direitas~/.vimrc
também. Seu caso pode ser diferente, mas o ponto é o mesmo, garanta que as teclas + ordem em ~ / .vimrc correspondam 100% ao que você digita manualmente.fonte