Emacs 有一个有用的transpose-words命令,它可以让用户将光标前的单词与光标后的单词交换,同时保留标点符号。
例如,'<code>stack |overflow' + Mt = '<code>overflow stack|' ('<code>|' 是光标位置)。
<a>|<p>变成<p><a|>.
是否可以在 Vim 中模拟它?我知道我可以使用dwwP,但它不适用于标点符号。
更新:不,dwwP真的不是一个解决方案。想象:
SOME_BOOST_PP_BLACK_MAGIC( (a)(b)(c) )
// with cursor here ^
Emacs 的 Mt 将交换b和c,从而产生(a)(c)(b).
有效的是/\w
yiwNviwpnviwgp。但它破坏""和"/。有更清洁的解决方案吗?
更新²:
解决了
:nmap gn :s,\v(\w+)(\W*%#\W*)(\w+),\3\2\1\r,<CR>kgJ:nohl<CR>
不完美,但有效。
感谢 Camflan 让%#我注意到这个项目。当然,这一切都在wiki上,但我没有意识到它可以解决该功能的精确(Emacs 完全正确)重复的问题transpose-words。