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.

ano
fonte
1
possível duplicata de Posso excluir uma linha inteira, exceto a quebra de linha?
EvergreenTree
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.

Hajo
fonte
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
lcd047
fonte
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
Karl Yngve Lervåg
fonte
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.

flukus
fonte
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.

trebucherry
fonte
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.

Varun Agarwal
fonte
É verdade, mas isso ainda deixa uma linha em branco.
muru