当前位置:  开发笔记 > 开发工具 > 正文

如何在Vim中模拟Emacs的转置词?

如何解决《如何在Vim中模拟Emacs的转置词?》经验,为你挑选了3个好方法。

Emacs有一个有用的transpose-words命令,可以让光标前面的单词与光标后的单词交换,保留标点符号.

例如,' stack |overflow'+ Mt =' overflow stack|'(' |'是光标位置).

|

成为

.

是否有可能在Vim中模仿它?我知道我可以使用dwwP,但它不适用于标点符号.

更新:不,dwwP真的没办法了.想像:

SOME_BOOST_PP_BLACK_MAGIC( (a)(b)(c) )
//             with cursor here ^

Emacs的Mt会交换,bc导致(a)(c)(b).

有效的是/\w yiwNviwpnviwgp.但它败坏"""/.有更清洁的解决方案吗?

Update²:

解决了
:nmap gn :s,\v(\w+)(\W*%#\W*)(\w+),\3\2\1\r,kgJ:nohl

不完美,但有效.

感谢Camflan将该%#项目引起我的注意.当然,它都在wiki上,但我没有意识到它可以解决精确问题(Emacs完全正确)重复transpose-words功能.



1> camflan..:

这些来自我的.vimrc,对我来说效果很好.

" swap two words
:vnoremap  `.``gvP``P
" Swap word with next word
nmap  gw    "_yiw:s/\(\%#\w\+\)\(\_W\+\)\(\w\+\)/\3\2\1/ *N*



2> Sam Martin..:

根据具体情况,您可以使用W或B命令,如dWwP中所示."大写"版本跳到下一个/上一个空格,包括标点符号.f和t命令也可以帮助指定已删除范围的结束.

关于各种交换技术的Vim Tips Wiki也有讨论.



3> Mark Biek..:

在一行中间,转到第一个单词的第一个字母,然后执行

dw wP

在一行的末尾(即该行的最后两个单词),转到单词之间的空格并执行

2dw bhP

从VIM和Emacs命令的便捷等效性


您可以通过向vimrc文件添加以下内容来为这些添加快捷键:

map L dwwP
map M 2dwbhP 

在这种情况下,SHIFT-L(在命令模式下)将切换行中间的单词,SHIFT-M将在结尾处进行切换.

注意:这对空格分隔的单词最有效,并且不能很好地处理OP的具体情况.

推荐阅读
重庆制造漫画社
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有