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 y
arrancado : quando você usa no modo normal, sem especificar um registro, o texto arrancado vai para lá e também para o registro padrão),1
para 9
(mudando os registros de exclusão, quando você usa comandos como c
ou 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, "),a
a z
para seu próprio uso (capitalizado A
para Z
sã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 Q
ou :
, 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 registers
para a referência completa.
Você pode, a qualquer momento, usar :registers
para exibir o conteúdo de todos os registros. Sinônimos e atalhos para este comando são :display
, :reg
e :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 0x08
backspace, 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 :put
comando, como muitos comandos Ex, funciona apenas na linha.
cf. :help :put
Você também poderia ter feito: :call setreg('"', @", 'V')
então p
. A setreg
funçã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 @x
onde x
está o nome do registro no VimL) e transforma-o no modo especificado no terceiro argumento, V
para linha, nada para caractere e literal ^V
para bloco.
cf. :help setreg()
. As funções reversas são getreg()
e getregtype()
.
Se você gravou uma macro com qa
... q
, :echo @a
será informado o que você digitou e @a
reproduzirá a macro (provavelmente você a conheceu, muito útil para evitar tarefas repetitivas)
cf. :help q
,help @
Corolário do exemplo anterior: Se você tiver 8go
na á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 dd
estiver 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
, :put
e 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, e
mas @:
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 bar
a á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 Q
nã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 foo
antes 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 :put
coloca 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 a
e é mostrado aqui como você pode usar o registro de expressão para fazer isso.
Se você fez dddd
, você pode fazer uu
para desfazer. Com p
você pode obter a última linha excluída. Mas, na verdade, você também pode recuperar até 9 exclusões com os registros @1
através @9
.
Melhor ainda, se o fizer "1P
, o .
modo Normal será reproduzido "2P
e 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 vnoremap
eu 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 yy
e 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-plus
uma 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 a
e registrador b
), basta definir uma variável c
e executar a operação nela.
Por exemplo, :set c = str2float(@a) + str2float(@b)
e você pode colar o conteúdo de c
qualquer lugar.
Por exemplo, enquanto estiver no modo INSERT, CTRL + R
digite =
para entrar no registro de expressão e digite apenas c
após o sinal de igual e pressione ENTER. Concluído, agora você deve ter o total de a
e b
registros.
Tudo isso pode ser gravado em uma macro e repetido!
A str2float
funçã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.