如何在vim中将单词移到句子的开头

时间:2009-12-10 13:35:20

标签: vim vi

说我有这条线

= function (x, y, word);

我希望将其转换为

 word = function (x,y);

到目前为止,我一直在手动选择单词,然后是'x',然后在开头粘贴它。然后我会删除不必要的逗号。

有没有更有效的方法来完成同样的事情?

6 个答案:

答案 0 :(得分:9)

不要像许多高级用户建议的那样创建所需的函数或宏,而是学习简单的命令,这些命令可以在您需要进行类似但略有不同的替换时为您提供帮助。

我的解决方案是:将光标放在逗号上,然后输入:xxdw^Pa <C-[>

说明

  • xx - 删除逗号和空格
  • dw - 删除字词
  • ^ - 将光标放在行
  • 的文本开头
  • P - 在光标
  • 之前放置已删除的文字
  • a - 在字后添加空格
  • <C-[> - 退出以恢复正常模式,如果您愿意,也可以按<ESC>,或者根本不按

如何将光标放在逗号中?了解 f, F, t, T, w b e 在文字周围移动得更快。

答案 1 :(得分:4)

:%s/\(.*\),\([^)]*\)/\2\1/

编辑:删除/ g

EDIT2:仅当你想对整个文件执行此操作时才会显示%s。如果您只想对当前行执行此操作,请将%替换为.(一个点)

答案 2 :(得分:1)

我建议录制一个宏:(从行的开头开始) qq2f,2xdw0Pa <esc>0jq,然后在您需要的任何地方运行该宏:@q

答案 3 :(得分:0)

试试这个::dw剪切当前单词,移到行首,然后:p将缓冲区粘贴到那里。

答案 4 :(得分:0)

将光标放在单词上并键入:

"0diw    delete word and store it in register 0
dF,      delete backwards up to and including ,
^        place cursor at first character in line
"0P      paste word

我建议将其映射到一个键。

答案 5 :(得分:0)

或者你可以使用正则表达式。

    :s/\(^.*\), \(\a\+\)\();\)/\2\1\3/

(匹配最后一个逗号) - &gt; \ 1

(匹配最后一个参数) - &gt; \ 2

(匹配右括号和分号) - &gt; \ 3

根据需要重新排列匹配的字词。

相关问题