例如,如果我有这一行
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_
这避免复制回车符