在 vim 中,有没有办法删除除给定文本对象之外的所有当前行?

在 vim 中,有没有办法删除除给定文本对象之外的所有当前行?

例如,如果我有这一行

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

这样做da"会给我:

printf(); // any comment

但我想要的是:

"something\n"

答案1

高效解答

按下f"d^f"lD可将当前对象保留在当前行,并删除其余对象。

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

您也可以创建文本对象!

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

您可以将光标保持在行中的任意位置并按de"

编辑:先前写的答案

您可以按"sda"删除当前对象

然后按dd删除当前行。

然后,按"sp粘贴当前对象。

完全,"sda"dd"sp将当前文本保留在当前行。

您可以将其映射到一个键,例如,

     :nmap <F5> "sda"dd"sp

答案2

_ ................... 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>

进行更改以避免粘贴换行符

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

而不是使用dd使用_g_这避免复制回车符

相关内容