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
。