Freqüentemente, nos arquivos de configuração, posso copiar e colar um bloco de linhas, e quero fazer pequenas alterações nesse bloco. Depois de colar, eu uso x
para excluir os caracteres que quero remover e depois colar o próximo bloco. Exceto x
coloca os caracteres excluídos na área de transferência, então eu tenho que copiar novamente o bloco de linhas novamente.
Existe uma maneira de fazer isso sem entrar no modo de inserção?
cut-copy-paste
register
durron597
fonte
fonte
Respostas:
Suas opções são:
_
. Por exemplo, para excluir uma linha, você digitaria"_dd
. Isso exclui sem afetar a área de transferência."ayy
e cole-o"ap
"0p
Corra
:help registers
para obter mais detalhes nos 3 primeirosfonte
x
eu usar"_x
então?x
, provavelmente aprenderá a excluir exclusões de movimento, comodt)
quais são excluídas até o próximo parêntese próximo dasd2W
quais exclui os próximos dois tokens separados por espaços em branco. Então você pode fazer algo como"_di{
dentro de uma região reforçada, que é algo que faço o tempo todo. No modo normal, isso significa " excluir tudo dentro desta região preparada para o buraco negro "nnoremap x "_x
ao meu~/.vimrc
(explicação aqui: stackoverflow.com/questions/54255/… ).x
não coloca coisas na área de transferência, coloca-as em um registro . Se você não informar em qual registro colocar, ele será inserido no registro sem nome, que naturalmente substituirá o conteúdo anterior. Em vez disso, diga qual registro usar" REGISTER x
:, em que REGISTRO é uma única letra. Você usa o mesmo prefixo de registro de cotação ppara colar a partir desse registro. (Observação: letras minúsculas substituem o conteúdo; letras maiúsculas são anexadas).Existem também dois registros especiais
"0
e"1
."0
é o ytexto arrancado mais recentemente ( ), que permanecerá mesmo se você excluir algum texto com outro comando (como x)."1
é o texto excluído mais recentemente, desde que esse texto não seja pequeno (uma linha). O texto excluído pequeno entra"-
.Finalmente, como Steve Vermeulen aponta, você pode dizer ao vim para não salvar o texto excluído especificando o registro do buraco negro
"_
.O comando de ajuda relevante é
:help registers
.fonte
O
:let
comando permitirá redefinir um registro nomeado. Na linha de comando do vim, pressionar Control+ R duas vezes 1 e, em seguida, o nome do registro colará o conteúdo do registro no comando. Em seguida, você pode modificar o que foi colado e salvar o registro com suas modificações.Exemplo:
"fyy
puxa a linha inteira (yy
) para of
registro ("f
).:let @f='
, e Control+ r, Control+ rnovamente, então f, e você deve vê-lo colar em "Foo Bar", para que sua linha de comando agora leia:let @f='Foo Bar
, com o cursor no final.:let @f='foo bar baz
.:let @f='foo bar baz'
e pressione Enter.Agora você redefiniu o conteúdo do
f
registro para "foo bar baz".(Isso também funciona para macros!
:help let
Para mais informações.)1 Control + rpermite inserir um registro quando você já está no modo de inserção, como se estivesse digitando os caracteres. Usar essa sequência duas vezes é importante porque "o texto é inserido literalmente, não como se fosse digitado. Isso difere quando o registro contém caracteres como
<BS>
". - o vimdoc insert.txt,:help i_CTRL-R_CTRL-R
fonte
Relacionado ao registro blackhole
"_
mencionado por @derobert, você pode encontrar um screencast útil em http://vimcasts.org/episodes/meet-the-yank-register/fonte
Plugin ReplaceWithRegister
http://www.vim.org/scripts/script.php?script_id=2703 (2009-2014)
Sugere o mapeamento
gr
.gr
Como alternativa, use
gr<text object>
para fazer isso sem uma seleção visual. O dot-repeat é suportado quando os plug-insrepeat.vim
de Tim Pope evisualrepeat.vim
de Ingo Karkat são instalados.fonte