Desfazer colar no vim

2

Eu sei sobre u e Ctrl-r para desfazer e refazer. Mas u me leva de volta ao último estado salvo. Eu quero saber como desfazer uma pasta cmd-v .

Por exemplo,

I am typing here bla bla bla, [link to website](here I paste a wrong http link 
with cmd-v)

Então eu quero voltar para

I am typing here bla bla bla, [link to website](

Existe alguma maneira de fazer isso no vim?

Obrigado antecipadamente.

    
por shinokada 22.12.2013 / 23:52

2 respostas

1

Aviso: Sou totalmente ignorante sobre como os teclados da Apple com cmd, em vez de ctrl, interagem com o vim, portanto, talvez seja necessário alterar ou ajustar alguns desses recursos.

A maneira correta de colar no vim é usar o comando p . Para colar da área de transferência do sistema, você usaria "*p . Assim, a maneira padrão de fazer as coisas seria deixar o modo de inserção e "*pa (o a , é claro, entra novamente no modo de inserção).

Se você deseja ter um atalho de teclado para usar no modo de inserção, parece natural fazer algo como:

inoremap <c-v> <esc>"*pa

(Isto é: na verdade digite o que está lá em vez de pressionar ctrl + v e escape).

À primeira vista, parece que isso deve fornecer o comportamento que você quer - é apenas automatizar o processo de colagem padrão que descrevi acima. Mas isso não acontece. O Vim trata todas as partes de um comando como parte do mesmo bloco de undo, e o próprio modo de inserção do vim é uma espécie de comando.

No entanto, você pode iniciar manualmente um novo bloco de desfazer enquanto estiver no modo de inserção usando ctrl + g seguido por u (sim, eu sei, essa chave parece não ser parecida com vim, mas lá vai você). Então, você pode alterar o remapeamento de chaves da seguinte forma:

inoremap <c-v> <c-g>u<esc>"*pa

Tudo isso funcionará com ctrl + v (Acabei de testá-lo no Windows e ele funciona lá, pelo menos), você pode precisar usar algo diferente (diferente de <c-v> ) para atalhos baseados em cmd dentro vim. Se você estiver usando um teclado da Apple, isso implica em OSX - se cmd + v for um atalho do sistema, não tenho certeza do que seria prioridade. Um pouco de googling superficial sugere que você pode precisar mexer em alguma configuração no nível do SO para obter o cmd funcionando corretamente com o vim.

    
por 23.12.2013 / 01:42
0

No MacVim, você precisa desmapear o item de menu Edit > Paste para sobrescrever o atalho, então você 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:

macmenu Edit.Paste key=<nop>
noremap <D-v> "*P
cnoremap <D-v> <C-r><C-o>*
inoremap <D-v> <C-g>u<C-r><C-o>*

O <C-g>u é necessário apenas no modo de inserção para corrigir o histórico de desfazer; os noremap e cnoremap são simplesmente para restaurar o comportamento padrão de colar nos modos normal e de comando.

Obrigado ao evilsoup por me apontar na direção certa aqui.

    
por 24.07.2014 / 10:07

Tags