
Eu sei sobre u
e Ctrl-r
para desfazer e refazer. Mas u
me leva de volta ao último estado salvo. Quero saber como desfazer um paste 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?
Desde já, obrigado.
Responder1
Isenção de responsabilidade: ignoro totalmente como os teclados da Apple com cmd em vez de ctrl interagem com o vim, então talvez seja necessário alterar ou ajustar parte disso.
A maneira correta de colar no vim é usar o p
comando. Para colar da área de transferência do sistema, você usaria "*p
. Portanto, a maneira padrão de fazer as coisas seria sair do modo de inserção e "*pa
( a
é claro, entrar 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 é: digite o que está lá em vez de pressionar ctrl+v e escapar).
À primeira vista pareceria assimdeveforneça o comportamento desejado - é 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 desfazer, e para 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, esse acorde de teclas parece bastante diferente do Vim, mas pronto). Então, você pode alterar o remapeamento da chave assim:
inoremap <c-v> <c-g>u<esc>"*pa
Tudo isso funcionará com ctrl+v (acabei de testar no Windows e funciona lá, pelo menos), talvez seja necessário usar algo diferente (diferente de <c-v>
) para atalhos baseados em cmd no vim. Se você estiver usando um teclado Apple, isso implica OSX - se cmd+v for um atalho do sistema, não tenho certeza do que teria prioridade. Algumas pesquisas superficiais no Google sugerem que você pode precisar mexer em alguma configuração no nível do sistema operacional para que o cmd funcione corretamente com o vim.
Responder2
No MacVim, você precisa desmapear o Edit > Paste
item de menu para substituir o atalho e, em seguida, remapear o Cmd-V ( D-v
no jargão do MacVim) para o comando apropriado em cada modo. Eu adicionei isso ao meu ~/.gvimrc
e agora tudo funciona maravilhosamente bem:
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>*
Isso <C-g>u
é necessário apenas no modo de inserção para corrigir o histórico de desfazer; os noremap
e cnoremap
servem simplesmente para restaurar o comportamento padrão de colagem nos modos normal e de comando.
Obrigado ao evilsoup por me apontar a direção certa aqui.