Como fazer recortar / copiar / colar no GVim no Ubuntu funcionar com Ctrl + X, Ctrl + C, Ctrl + V?


54

Por padrão, os atalhos de cortar / copiar / colar no GVim no Ubuntu são:

 Cortar "+ x
 Copiar "+ y
 Colar "+ gP

Gostaria de usar combinações de teclas de controle no GVim, como no Firefox e em outros aplicativos gnome. Como faço para configurar o GVim para funcionar como outros aplicativos Gnome?


Para evitar conflitos com as teclas vim padrão, optar por Ctrl + Shift + Key em vez de Ctrl + Key
Sheharyar

Respostas:


50

Adicione as seguintes linhas ao seu _vimrcou.vimrc

source $VIMRUNTIME/mswin.vim
behave mswin

Mas cuidado, o modo visual é o CTRL-Q em vez do CTRL-V.

Para uma visão geral do que o mswin.vim vê, o código - fonte do mswin.vim . Ele é comentado muito bem e, se algum comando não estiver claro, você poderá consultá-lo facilmente na ajuda do vim.

Aqui está uma rápida visão geral compilada a partir da fonte:

  • as teclas de retrocesso e cursor passam para a linha anterior / seguinte
  • CTRL-X e SHIFT-Del são cortados
  • CTRL-C e CTRL-Insert são Cópia
  • CTRL-V e SHIFT-Insert são Colar
  • Use CTRL-Q para fazer o que CTRL-V costumava fazer
  • Use CTRL-S para salvar, também no modo Inserir
  • CTRL-Z é Desfazer; embora não em cmdline
  • CTRL-Y é Refazer (embora não seja repetido); embora não em cmdline
  • Alt-Space é o menu Sistema
  • CTRL-A é Selecionar tudo
  • CTRL-Tab é a próxima janela
  • CTRL-F4 é Fechar janela

A pedido do Nippysaurus: coloquei no meu .gvimrc o seguinte para mostrar Ctrl-V além de Colar no menu:

unmenu! Edit.Paste
aunmenu Edit.Paste
nnoremenu 20.360 &Edit.&Paste<Tab>Ctrl-V        "+gP
cnoremenu    &Edit.&Paste<Tab>Ctrl-V        <C-R>+

Eu não testei completamente, apenas uma verificação rápida se fez o que eu esperava. Funciona para mim, espero que funcione para você ;-)


11
Compreendo e aprecio os pontos que Manni e Peter Thorin fizeram nos comentários da resposta de Peter Thorin. Minha opinião é que aprendi o GVim no Windows, como substituto do bloco de notas, e quero menos atrito. Obrigado Ludwig
pcapademic

2
Existe uma maneira de alterar o texto do atalho do menu para corresponder às novas teclas de atalho?
Nippysaurus 30/11/2009

@ Nippysaurus: eu tentei com menutrans em .gvimrc. Não fazê-lo funcionar, vai ter um outro olhar para ele à noite ...
Ludwig Weinzierl

2
Parece que mswin.vimjá recebeu uma behave mswinchamada. É necessário chamar isso de novo sozinho _vimrc?
19597 Nathan Friend

11
@NathanFriend Ditto. Funciona mesmo sem behave mswin, pelo menos no meu sistema com o Vim 8.0.
Mikel

46

Se você deseja que Recortar / Copiar / Colar funcione usando as teclas de atalho "padrão", mas não deseja alterar nenhuma das outras opções de configuração no gvim, tente adicionar o seguinte a ~/.vimrc.

vmap <C-c> "+yi
vmap <C-x> "+c
vmap <C-v> c<ESC>"+p
imap <C-v> <C-r><C-o>+

Colar só funciona no modo Visual e de inserção, para que você não precise se preocupar com o conflito com o Ctrl-V e o Modo Visual em blocos. Isso não é um problema, porque Copiar e Cortar o coloca no modo de inserção, para que você possa colar imediatamente depois. Se você tentar, verá que parece completamente natural.

Eu vim com essa configuração depois de várias iterações de ajustes, e acho que é "perfeita" agora. Se você estiver um pouco insatisfeito com sua configuração atual de copiar / colar, tente isso e aposto que você vai adorar.


Era exatamente isso que eu estava procurando. Obrigado.
Sean McCleary

2
Após algumas experiências e consultas :help i_ctrl-r_ctrl-o, decidi mudar imap <C-v> <ESC>"+papara imap <C-v> <C-r><C-o>+; isso funciona como esperado quando o cursor está à esquerda do primeiro caractere de uma linha e imita mais de perto o comportamento "padrão".
Holger

Estou pensando em mudar <C-v>para shift + insert que parece ser muito mais rápido na minha máquina. Mas no meio de um projeto e não sinto vontade de reiniciar o vim agora. Apenas compartilhando
Será

Você é impressionante =)
Yugal Jindle

9

Se você deseja manter o comportamento normal do vim, mas também permitir um uso menos complicado da área de transferência do sistema, consulte Acessando a área de transferência do sistema . Se você gostaria gvim para usar a área de transferência do sistema como seu buffer padrão (assim qualquer x, y, p, etc. comando usa a área de transferência), em seguida, adicione a seguinte linha ao seu vimrc:

set clipboard=unnamed

Eu pessoalmente uso os buffers muito mais no vim do que entre o vim e o sistema; então eu prefiro ter um atalho um pouco mais complicado do que ter a área de transferência do sistema constantemente sobrecarregada. Mas é bom que a opção esteja lá para quem preferir.


2

Eu acho que você pode adicionar isso com o comando: imap (tentei apenas com Ctrl + X no Windows que funcionou, pressionar ctrl + c parece cancelar o comando, para que você possa fazê-lo no vimrc).

:imap <C-X> "+x
:imap <C-C> "+y 
:imap <C-V> "+gP

Se você adicioná-lo ao seu ~ / .vimrc, basta remover o: na frente do imap.

O imap adiciona apenas as ligações no modo de inserção, portanto, você pode alterá-lo para apenas mapear ou algo mais. Procure :help mapmodeaprender mais sobre remapeamento e remoção de mapeamento.

Boa sorte!


11
Isso deve fazer um pouco do truque. Mas é uma má ideia fazer isso. Ctrl-V deve entrar no modo visual, Ctrl-C cancelará qualquer comando. E o truque funcionará apenas no seu sistema; em uma máquina diferente, você estará perdido.
22134 innaM

11
Eu concordo em parte com o fato de que é uma má idéia, eu não gostaria de usá-lo, mas se você for um usuário casual do gvim, provavelmente não perderá as ligações que remove de qualquer maneira.
22420 Peter Thorin

11
Por que usar o gvim em primeiro lugar? Quanto tempo você permanecerá um usuário casual?
innaM 22/07/2009

2
Não acho que seja uma má idéia. As pessoas estão acostumadas a Ctrl + X etc., e existem bilhões de outras razões para usar o vim.
181 Ludwig Weinzierl
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.