【发布时间】:2010-09-13 13:43:25
【问题描述】:
Emacs 有一个有用的transpose-words 命令,它可以让用户将光标前的单词与光标后的单词交换,同时保留标点符号。
例如,‘stack |overflow’ + M-t = ‘overflow stack|’(‘|’是光标位置)。
<a>|<p> 变为 <p><a|>。
是否可以在 Vim 中模拟它?我知道我可以使用dwwP,但它不适用于标点符号。
更新:不,dwwP 真的不是解决方案。想象一下:
SOME_BOOST_PP_BLACK_MAGIC( (a)(b)(c) )
// with cursor here ^
Emacs 的 M-t 将交换 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 上,但我没有意识到它可以解决transpose-words 功能的精确(Emacs 完全正确)重复的问题。
【问题讨论】:
-
我很难用谷歌搜索“%#”。它们在这里意味着什么?
-
使用内置的 Vim 帮助: :h /\%#
标签: vim emacs editor usability