Excluindo no Vim e colando sem nova linha


11

Muitas vezes no vim eu gostaria de excluir uma linha completamente, então eu uso o dd. No entanto, preciso colar essa linha em outra posição dentro de uma linha, mas isso insere uma nova linha antes de colar, portanto, dificultando a obtenção do resultado desejado. Por exemplo,

while( pasteInHere )
{
    cin >> n; // Delete this line completely with dd
}

quando faço isso com o código acima, recebo:

while( pasteInHere )
cin >> n; // Delete this line completely with dd
{
}

o que está muito longe do resultado que eu quero ... como posso suprimir esse comportamento da nova linha ou usar outro método que o faça com muita eficiência? Eu não acho que d $ seja bom porque eu não só tenho que ir para o início da linha, mas se eu quiser excluir a linha vazia também, preciso excluí-la em outro registro, sinto que deve haver uma maneira mais fácil! Obrigado.



1
não é uma duplicata, como eu disse que quero uma maneira mais eficiente do que ir para o início da linha, também quero remover a linha completa com o caractere de nova linha .... não apenas o conteúdo da linha
fYre

Oh, entendo o que você quer dizer agora. Não estava muito claro para mim o que você estava tentando realizar.
EvergreenTree

1
0Dexcluir linha, exceto quebra de linha. E do gJque juntar linhas. Agora você pode colocar o texto sem linha de interrupção e sem linha vazia.
Alex Kroll

Respostas:


9

Você pode ir a qualquer lugar na linha acima da linha que deseja excluir e pressionar JDe colar pno ponto desejado.

  • June as duas linhas e o move no início do texto que você deseja excluir. Isso exclui um caractere de nova linha e o recuo da linha que você deseja mover.
  • D exclui da posição atual do cursor até o final da linha, mas preserva o caractere de nova linha.

Dica: você pode usar :puse você excluiu Dou puxou com y$e deseja colar com uma nova linha.


3

Não é realmente mais simples, mas é um pouco mais eficiente, e você também pode criar mapas no modo normal para as duas sequências:

  • puxar: vá para a linha que deseja mover e depois ^D"_dd
  • colando: vá para a palavra que deseja substituir e, em seguida, viwp

2

Você pode conseguir algo que funciona muito bem com um imap. Adicione o seguinte ao seu vimrc:

inoremap <c-a> <c-r>1<esc>k$Jxi

Isso criará um mapeamento para CTRL-acolar o último texto excluído (com ddou similar). Se preferir, é claro que você pode usar uma chave diferente para o mapeamento.

Referências:

:h i_CTRL-R
:h quote1
:h J

1

Isso também me parece um pouco, nunca pensei em otimizá-lo antes, mas esse mapeamento funciona:

nmap dil ^d$

dilé "de exclusão na linha", semelhante a diw, di", etc.


1

Colar sem nova linha

Coloque isso no seu arquivo .vimrc:

" Paste yanked line without line breaks before/after cursor position
nnoremap gP i<CR><Esc>PkJxJx
nnoremap gp a<CR><Esc>PkJxJx

Exemplo:

<span style="color:">danger</span>

Agora você pode digitar gppara inserir #D51B3Fdepois color:enquanto meu cursor estiver no :modo Normal.

Arrancar sem nova linha

Use a resposta de flukus:

" Delete current line without yanking the line breaks
nnoremap dil ^d$

como acrônimo de excluir linha interna . Isso também se livra do recuo principal.


0

Você pode selecionar o texto que deseja copiar pressionando ve depois colocá-lo no buffer pressionando ye colá-lo em qualquer lugar p. Não insere nenhuma nova linha.


É verdade, mas isso ainda deixa uma linha em branco.
muru
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.