Respostas:
Sim. Bata Ctrl- Rentão ". Se você tiver caracteres de controle literais no que você puxou, use Ctrl- R, Ctrl- O," .
Aqui está uma explicação do que você pode fazer com os registros. O que você pode fazer com os registros é extraordinário e, depois de saber como usá-los, você não pode viver sem eles.
Registradores são basicamente locais de armazenamento para seqüências de caracteres. O Vim tem muitos registros que funcionam de diferentes maneiras:
0(registro yarrancado : quando você usa no modo normal, sem especificar um registro, o texto arrancado vai para lá e também para o registro padrão),1para 9(mudando os registros de exclusão, quando você usa comandos como cou d, o que foi excluído passa para o registro 1, o que estava no registro 1 vai para o registro 2, etc. ),"(padrão de registro, também conhecido como registo sem nome Este é o lugar onde o. "vem em Ctrl- R, "),aa zpara seu próprio uso (capitalizado Apara Zsão para acrescentar aos registos correspondentes)._(age como /dev/null(Unix) ou NUL(Windows), você pode escrever nele, mas é descartado e, quando lê, está sempre vazio),- (pequeno registro de exclusão),/(registo pesquisar padrão, atualizado quando você olha para o texto com /, ?, *ou #, por exemplo, você também pode escrever para ele para alterar dinamicamente o padrão de pesquisa),:(armazena o último comando digitado no VimL via Qou :, somente leitura),+e *(registros da área de transferência do sistema, você pode gravá-los para definir a área de transferência e ler o conteúdo da área de transferência)Veja :help registerspara a referência completa.
Você pode, a qualquer momento, usar :registerspara exibir o conteúdo de todos os registros. Sinônimos e atalhos para este comando são :display, :rege :di.
No modo Inserir ou Linha de comando, Ctrl- Rmais um nome de registro, insere o conteúdo desse registro. Se você deseja inseri-los literalmente (sem recuo automático, sem conversão de caracteres de controle, como 0x08backspace, etc.), você pode usar Ctrl- R, Ctrl- O, nome do registro. Vejo:help i_CTRL-R e parágrafos seguintes para mais referência.
Mas você também pode fazer o seguinte (e provavelmente esqueci muitos usos para registros).
No modo normal, pressione ":p. O último comando que você usou no vim é colado no seu buffer.
Vamos decompor: "é um comando no modo Normal que permite selecionar o registro a ser usado durante a próxima operação de arrancar, excluir ou colar. Então, ":seleciona o registro de dois pontos (armazenando o último comando). Então pé um comando que você já conhece, que cola o conteúdo do registro.
cf. :help ",:help quote_:
Você está editando um arquivo VimL (por exemplo, o seu .vimrc) e gostaria de executar um par de linhas consecutivas agora: yj:@"Enter.
Aqui, yjpuxa a linha atual e a próxima (isso é porque j é um movimento linear, mas está fora do escopo desta resposta) no registro padrão (também conhecido como registro sem nome). Em seguida, o :@comando Ex reproduz comandos Ex armazenados no registro dado como argumento e "é como você se refere ao registro sem nome. Veja também o topo desta resposta, que está relacionado.
Não confunda "usado aqui (que é um nome de registro) com o "do exemplo anterior, que era um comando no modo Normal.
cf. :help :@e:help quote_quote
Insira o último padrão de busca em seu arquivo no modo de Inserção, ou na linha de comando, com Ctrl- R, /.
cf. :help quote_/,help i_CTRL-R
Corolário: Mantenha o seu padrão de pesquisa, mas acrescentar uma alternativa: / Ctrl- R, / \|alternative.
Você selecionou duas palavras no meio de uma linha no modo visual, puxou-as com y, elas estão no registro sem nome. Agora você deseja abrir uma nova linha logo abaixo de onde você é, com essas duas palavras: :pu. Isso é uma abreviação de :put ". O :putcomando, como muitos comandos Ex, funciona apenas na linha.
cf. :help :put
Você também poderia ter feito: :call setreg('"', @", 'V')então p. A setregfunção define o registro cujo nome é dado como primeiro argumento (como uma string), inicializa-o com o conteúdo do segundo argumento (e você pode usar registradores como variáveis com o nome de @xonde xestá o nome do registro no VimL) e transforma-o no modo especificado no terceiro argumento, Vpara linha, nada para caractere e literal ^Vpara bloco.
cf. :help setreg(). As funções reversas são getreg()e getregtype().
Se você gravou uma macro com qa... q, :echo @aserá informado o que você digitou e @areproduzirá a macro (provavelmente você a conheceu, muito útil para evitar tarefas repetitivas)
cf. :help q,help @
Corolário do exemplo anterior: Se você tiver 8gona área de transferência, @+reproduzirá o conteúdo da área de transferência como uma macro e, portanto, passará para o 8º byte do seu arquivo. Na verdade, isso funcionará com quase todos os registros. Se a última string inserida ddestiver no modo Inserir, @.(porque o .registro contém a última string inserida) excluirá uma linha. (Documentação Vim está errado a este respeito, uma vez que afirma que os registos #, %, :e .só irá funcionar com p, P, :pute Ctrl- R).
cf. :help @
Não confunda :@(comando que executa comandos do Vim em um registro) e @(comando no modo normal que executa comandos no modo normal em um registro).
Exceção notável é @:. O registro de comando não contém os dois pontos iniciais nem o retorno de carro final. No entanto, no modo Normal, @:fará o que você espera, interpretando o registro como um comando Ex, sem tentar reproduzi-lo no modo Normal. Portanto, se o seu último comando foi :e, o registro contém, emas @:recarregará o arquivo, não para o final da palavra.
cf. :help @:
Mostre o que você vai fazer no modo Normal antes de executá-lo: @='dd' Enter. Assim que você pressiona a =tecla, o Vim muda para a avaliação da expressão: quando você digita uma expressão e pressiona Enter, o Vim calcula e o resultado age como um conteúdo de registro. Obviamente, o registro =é somente leitura e one-shot. Cada vez que você começar a usá-lo, será necessário inserir uma nova expressão.
cf. :help quote_=
Corolário: Se você estiver editando um comando e perceber que deve inserir na linha de comando alguma linha do seu buffer atual: não pressione Esc! Use Ctrl- R =getline(58) Enter. Depois disso, você voltará à edição da linha de comando, mas ele inseriu o conteúdo da 58ª linha.
Defina um padrão de pesquisa manualmente: :let @/ = 'foo'
cf. :help :let
Observe que, para fazer isso, você não precisa escapar /do padrão. No entanto, é necessário duplicar todas as aspas simples, é claro.
Copiar todas as linhas que começam com foo, e posteriormente todas as linhas que contêm bara área de transferência, estes comandos de cadeia: qaq(repõe a um registo de armazenamento de um macro vazio no seu interior), :g/^foo/y A, :g/bar/y A, :let @+ = @a.
Usar um nome de registro de capital faz com que o registro funcione no modo de acréscimo
Melhor, se Qnão tiver sido remapeado por mswin.vim, inicie o modo Ex com Q, encadeie os "comandos de dois pontos" que são realmente melhores chamados "comandos Ex" e volte ao modo Normal digitando visual.
cf. :help :g, :help :y,:help Q
Espaço duplo seu arquivo: :g/^/put _. Isso coloca o conteúdo do registro do buraco negro (vazio ao ler, mas gravável, comportando-se como /dev/null) linha a linha, após cada linha (porque toda linha tem um começo!).
Adicionar uma linha contendo fooantes de cada linha: :g/^/-put ='foo'. Este é um uso inteligente do registro de expressão. Aqui, -é um sinônimo para .-1(cf. :help :range). Uma vez que :putcoloca o texto após a linha, você deve explicitamente instruí-lo a agir sobre o anterior.
Copie o buffer inteiro para a área de transferência do sistema: :%y+.
cf. :help :range(para a %parte) e :help :y.
Se você registrou incorretamente uma macro, pode digitar :let @a=' Ctrl- R =replace(@a,"'","''",'g') Enter 'e editá-la. Isso modificará o conteúdo da macro armazenada no registro ae é mostrado aqui como você pode usar o registro de expressão para fazer isso.
Se você fez dddd, você pode fazer uupara desfazer. Com pvocê pode obter a última linha excluída. Mas, na verdade, você também pode recuperar até 9 exclusões com os registros @1através @9.
Melhor ainda, se o fizer "1P, o .modo Normal será reproduzido "2Pe assim por diante.
cf. :help .e:help quote_number
Se você deseja inserir a data atual no modo Inserir: Ctrl- R=strftime('%y%m%d')Enter.
cf. :help strftime()
Mais uma vez, o que pode ser confuso:
:@ é um comando de linha de comando que interpreta o conteúdo de um registro como vimscript e o origina@ no comando de modo normal que interpreta o conteúdo de um registro como pressionamentos de tecla no modo normal (exceto quando você usa o :registro, que contém o último comando reproduzido sem os dois pontos iniciais: nesse caso, ele repete o comando como se você também tivesse digitado novamente os dois pontos e a tecla de retorno final).
" no modo normal, comando que ajuda a selecionar um registro para arrancar, colar, excluir, corrigir etc.
" também é um nome de registro válido (o registro padrão ou sem nome) e, portanto, pode ser passado como argumento para comandos que esperam nomes de registroPara colar algo que é a área de transferência do sistema, você pode simplesmente usar SHIFT- INS.
Funciona no Windows, mas acho que também funciona bem no Linux.
:!rm -rf /<cr>, ele será executado. Use registros em vez disso!
shift-insé mais fácil do que ctrl-R+*? Isso é claro se você estiver no gvim. Se você está no terminal conectado a outra máquina e deseja colar algo da sua área de transferência, sabe algo melhor do que shift-ins? porque os registros não funcionam nessa situação. Pense antes de comentar e fazer outras coisas (como voto negativo).
"Gostaria de colar texto arrancado na linha de comando do Vim."
Embora a resposta mais votada esteja muito completa, prefiro editar o histórico de comandos.
No modo normal, digite: q:. Isso fornecerá uma lista de comandos recentes, editáveis e pesquisáveis com os comandos vim normais. Você começará em uma linha de comando em branco na parte inferior.
Para o exato que o artigo pede, colando uma linha arrancada (ou arrancou qualquer coisa) em uma linha de comando, puxe seu texto e depois: q:p(entre no modo de edição do histórico de comandos e, em seguida, (p) coloque seu texto arrancado em um novo comando Edite à vontade, enterpara executar.
Para sair do modo histórico de comandos, é o contrário. No modo normal na história comando, digite: :q+enter
Para colar algo da área de transferência do sistema na linha de comando do Vim ("modo de comando"), use Ctrl+ Rseguido de +. Para mim, pelo menos no Ubuntu, o Shift+ Insnão está funcionando.
PS: Não sei por que Ctrl+ Rseguido por *, que é teoricamente o mesmo que Ctrl+ Rseguido por +, nem parece funcionar sempre. Pesquisei e descobri a +versão e ela parece funcionar sempre, pelo menos na minha caixa.
Eu estava tendo um problema semelhante. Eu queria que o texto selecionado terminasse em um comando, mas não confie em colá-lo. Aqui está o comando para o qual eu estava tentando escrever um mapeamento:
:call VimuxRunCommand("python")
Os documentos para este plug-in são exibidos apenas usando literais de string. O seguinte será interrompido se você tentar selecionar o texto que contém aspas duplas:
vnoremap y:call VimuxRunCommand("<c-r>"")<cr>
Para contornar isso, basta referenciar o conteúdo da macro usando @:
vnoremap y:call VimuxRunCommand(@")<cr>
Passa o conteúdo do registro sem nome e trabalha com minhas aspas duplas e edgecases multilinhas.
@caractere para o comando vimux. pense @como escapando da citação dupla a seguir e sendo tratado como um registro, e não como um caractere regular. O que vnoremapeu defini está ativo no modo visual, então ele puxa o texto selecionado e o cola no comando vimux, enviando-o para um intérprete em execução em um painel adjacente. realmente ótimo para trabalhar em um script e testar pequenas partes dele com algumas teclas.
OS X
Se você estiver usando o Vim no Mac OS X, infelizmente ele vem com uma versão mais antiga e não cumpre as opções da área de transferência. Felizmente, Homebrew pode facilmente resolver esse problema.
Instale o Vim:
brew install vim --with-lua --with-override-system-vi
Instale a versão da GUI do Vim:
brew install macvim --with-lua --with-override-system-vi
Reinicie o terminal para que ele entre em vigor.
Anexe a seguinte linha a ~/.vimrc
set clipboard=unnamed
Agora você pode copiar a linha no Vim yye colá-la em todo o sistema.
Para o contexto, essas informações vêm do comportamento pronto para uso, sem plugins, sem .vimrc Vim 7.4 no Linux Mint com as opções padrão.
Você sempre pode selecionar texto com o mouse (ou usar Vou ve colocar a seleção no registro "*) e colá-lo na linha de comando com Shift+ Ctrl+v .
Digitar Ctrl+ rna linha de comando fará com que seja solicitado um nome de registro. portanto, digitar :CTRL-r*colocará o registro de conteúdo * na linha de comando. Ele colará qualquer registro, não apenas "*. Veja :help c_CTRL-R.
Além disso, o botão do meio do mouse colará na linha de comando.
Veja :help->quote-plusuma descrição de como o X Window lida com a seleção. Mesmo em um Vim simples e pronto para uso (novamente, no Vim 7.4 no Linux Mint, de qualquer maneira), qualquer seleção feita com o botão esquerdo do mouse pode ser colada na linha de comando com o botão do meio do mouse.
Além disso, o botão do meio do mouse também colará o texto selecionado no Vim em muitos outros aplicativos do X Window, inclusive os da GUI (por exemplo, Firefox e Thunderbird ) e colar texto na linha de comando também é possível onde o texto foi selecionado em outros aplicativos .
Veja: help-> x11-selection para obter informações adicionais.
tl; dr
Tente a abordagem: CTRL-r primeiro e, em seguida, use Shift+ Ctrl+ vou o botão do meio do mouse, se precisar de algo mais.
É admitido que pode ser confuso.
"[a-z]y: Copia texto para o registro [az]
Use :!para ir para o comando editar
Ctrl+ R: Siga a identidade do registro para colar o que você copia.
É usado no CentOS 7.
Se você tiver dois valores agrupados em dois registradores diferentes (por exemplo, registrador ae registrador b), basta definir uma variável ce executar a operação nela.
Por exemplo, :set c = str2float(@a) + str2float(@b)e você pode colar o conteúdo de cqualquer lugar.
Por exemplo, enquanto estiver no modo INSERT, CTRL + Rdigite =para entrar no registro de expressão e digite apenas capós o sinal de igual e pressione ENTER. Concluído, agora você deve ter o total de ae bregistros.
Tudo isso pode ser gravado em uma macro e repetido!
A str2floatfunção é usada se você estiver trabalhando com flutuadores; caso contrário, obterá números inteiros.
Não tenho certeza se isso é idiomático, mas funcionou para o meu caso, onde eu precisava adicionar 2 números seguidos e repeti-lo por mais 500 linhas.