É possível colar no modo de inserção no Vim?
É possível colar no modo de inserção no Vim?
Respostas:
Enquanto estiver no modo de inserção, pressione CTRL-R {register}
Exemplos:
CTRL-R *
irá inserir no conteúdo da área de transferência CTRL-R "
(o registro sem nome) insere a última exclusão ou puxão. Para encontrar isso no tipo de ajuda do vim :h i_ctrl-r
CTRL-R *
funciona apenas no GVIM ou em versões compiladas para interagir com x. Digite vim --version
e procure +xterm_clipboard
. Se você não tiver isso, precisará de uma versão diferente do vim. ( vim.wikia.com/wiki/Accessing_the_system_clipboard )
+clipboard
, mas, se tiver, +xterm_clipboard
deve fazê-lo de qualquer maneira. Em alguns sistemas operacionais xterm_clipboard
não é aplicável.
*
registro é colável com o clique do meio do mouse, enquanto +
é a tradicional copiar / colar. standards.freedesktop.org/clipboards-spec/clipboards-latest.txt
Se você não quer Vim para mangle formatação no incoming texto colado, você também pode querer considerar o uso: :set paste
. Isso impedirá que o Vim remarque seu código. Quando terminar de colar, :set nopaste
retornará ao comportamento normal.
Também é possível alternar o modo com uma única tecla, adicionando algo como set pastetoggle=<F2>
ao seu .vimrc. Mais detalhes sobre a alternância da indentação automática estão aqui .
:set nopaste
desativará o modo colar
:set paste!
Provavelmente, a pasta definida está muito próxima do seu histórico de comandos, então você pode simplesmente pressionar ':', depois clicar com a seta para cima e adicionar um '!'.
:set paste!
Thanks :)
!
no final do comando vim
ativa e desativa o comando. Dessa forma, você não precisa digitar; :set nopaste
pode rolar o histórico e executar o mesmo comando ( :set paste!
) novamente.
Não, não diretamente. O que você pode fazer é sair rapidamente do modo de inserção para uma única operação no modo normal Ctrl-Oe colar a partir daí, que terminará colocando você de volta no modo de inserção.
Combinação de teclas: Ctrl-O p
EDIT: Interessante. Parece que existe uma maneira como várias outras pessoas listaram.
esc + p
?
esc + p + i
e definitivamente mais fácil de escrever do queCTRL-R + "
CTRL-R "
. Por exemplo, embora as configurações do vimrc possam mudar isso, colar algo em uma nova linha usando CTRL-O p
faz com que o recuo diminua.
Enquanto estiver no modo de inserção, você pode usar Ctrl-R {register}
, onde o registro pode estar:
+
para a área de transferência,*
para a área de transferência X (último texto selecionado em X), "
para o registro sem nome (última exclusão ou puxão no Vim),:h registers
).Ctrl-R {register}
insere o texto como se tivesse sido digitado.
Ctrl-R Ctrl-O {register}
insere o texto com o recuo original.
Ctrl-R Ctrl-P {register}
insere o texto e o recua automaticamente.
Ctrl-O
pode ser usado para executar qualquer comando do modo normal antes de retornar ao modo de inserção;
Ctrl-O "+p
também pode ser usado, por exemplo.
Para obter mais informações, consulte a documentação com :h i_ctrl-r
Você pode usar isso para colar da área de transferência com Ctrlv:
set pastetoggle=<F10>
inoremap <C-v> <F10><C-r>+<F10>
E isso para puxar a seleção visual para a área de transferência com Ctrlc:
vnoremap <C-c> "+y
Se você também deseja usar a área de transferência por padrão para puxar / colar clássico do vim ( y/ p) no modo normal, aqui está uma opção de configuração que faz isso:
set clipboard=unnamedplus
Com essas configurações, você pode, por exemplo, puxar primeiro no modo normal e depois colar Ctrlvno modo de inserção. Além disso, você pode colar texto de diferentes instâncias do vim e aplicativos diferentes.
Outra opção é:
set clipboard=unnamed
Depois, você poderá selecionar algo arrastando o mouse no seu ambiente X e colá-lo no vim posteriormente. Mas (por algum motivo), você não poderá puxar algo ( y) no Vim eshiftinsert em outro lugar posteriormente, o que provavelmente é bastante limitador.
Documentos do Vim sobre isso: http://vim.wikia.com/wiki/Accessing_the_system_clipboard
Para colar a partir de registros personalizados, você pode seguir as outras respostas :). Esta resposta é principalmente sobre a integração do Vim com a área de transferência do sistema.
Observe que, para set clipboard=unnamedplus
e set clipboard=unnamed
para o trabalho, você precisa usar gvim ou vimx ( vim-X11
): são compilados +xterm_clipboard
. Opcionalmente, você pode colocar isso no seu .bashrc
alias vim
com vimx
:
if [ -e /usr/bin/vimx ]; then
alias vim='/usr/bin/vimx'; # vim with +xterm_clipboard
fi
Você pode descobrir se o seu vim possui ou não +xterm_clipboard
as informações fornecidas por vim --version
.
:set paste
e o bizantino <leader><leader> * y
são remotamente desejáveis? Para não parecer muito comprometido, estou genuinamente curioso sobre o que a filosofia vim reflete ou se é apenas um infortúnio histórico.
inoremap <S-Insert> <F12><C-r>+<F12>
(eu uso F12 como pastetoggle). Obrigado.
Se você configurar o Vim para usar a área de transferência do sistema ( :set clipboard=unnamed
), qualquer texto que você copiar no Vim poderá ser colado usando Shift+ Insert. Shift+ Inserté simplesmente uma combinação de teclas de colar em todo o sistema operacional ( Ctrl+ Inserté a 'cópia' correspondente).
p
colar o texto na área de transferência?
Shift + Insert
para colar o texto, precisamos estar no modo de inserção.
Você também pode usar o botão do meio do mouse para colar no modo de inserção (somente Linux).
Você pode entrar no -- INSERT (past) --
modo via:
ou
:set paste
e entrando no modo de inserção ( :set nopaste
para desativar)Uma vez no -- INSERT (past) --
modo, basta usar a função de colar do sistema (por exemplo, CtrlShiftvno Linux, Cmdvno Mac OS).
Essa estratégia é muito útil ao usar o vim over ssh.
Sim. No Windows Ctrl+ Ve no Linux, pressione os dois botões do mouse quase simultaneamente.
No Windows, acho que essa linha no meu _vimrc provavelmente faz isso:
source $VIMRUNTIME/mswin.vim
No Linux, não me lembro como fiz. Parece que eu provavelmente excluí alguma linha do arquivo .vimrc padrão.
Um mapa personalizado parece apropriado nesse caso. Isto é o que eu uso para colar itens arrancados no modo de inserção:
inoremap <Leader>p <ESC>pa
Minha Leader
chave aqui é \
; isso significa que pressionar \p
no modo de inserção colaria os itens / linhas arrancados anteriormente.
Basta adicionar o mapa:
" ~/.vimrc
inoremap <c-p> <c-r>*
reinicie o vim e quando pressionar Crtl+p
no modo de inserção, o texto copiado será colado