No vim, existe uma maneira de excluir toda a linha atual, exceto o objeto de texto fornecido?

3

Por exemplo, se eu tiver essa linha

printf("something\n"); // any comment

Fazer da" me dá:

printf(); // any comment

Mas o que eu gostaria:

"something\n"
    
por Quentin 01.06.2016 / 17:33

2 respostas

4

Resposta eficiente

Pressione f"d^f"lD para manter o objeto atual na linha atual, excluindo o resto deles.

     f" - find "
     d^ - delete from current cursor position to start of line.
     l - move right
     D - delete from current cursor till end.(d$)

Você também pode criar um objeto de texto!

  :nmap de" f"d^f"lD               // de" - delete except double quotes.

Você pode manter o cursor em qualquer lugar na linha e pressionar de" .

Editar: resposta escrita anteriormente

Você pode pressionar "sda" para excluir o objeto atual

Em seguida, pressione dd para excluir a linha atual.

Em seguida, pressione "sp para colar o objeto atual.

Totalmente, "sda"dd"sp para manter o texto atual na linha atual.

Você pode mapear isso para uma chave como

     :nmap <F5> "sda"dd"sp
    
por 02.06.2016 / 08:28
0
_ ................... jump to the first non-blank
f( .................. jump to parenthesis
yi( ................. yank inner ()
dd .................. delete line contents
"0p ................. paste yank register

nnoremap <F2> :exec 'normal _f(yi(dd"0p'<CR>

Alterando para evitar colar nova linha

nnoremap <F2> :exec 'normal _f(yi(_dg_"0p'<CR>

Em vez de usar dd usando _g_ Isso evita a cópia do retorno de carrossel

    
por 03.02.2018 / 21:47

Tags