You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Vim命令跨单个运算符交换两个单词?

跨单个运算符交换两个单词的Vim命令方案

当然有啦!Vim原生就支持通过命令组合轻松完成这个操作,不用额外装插件,下面给你两种常用的思路,结合例子讲解更清楚:

假设我们有代码片段:foo + bar,想要把它改成bar + foo,试试这些方法:

方法一:文本对象+寄存器的交互式操作

这种方式适合手动处理单个场景,步骤直观:

  • 把光标移到右边的单词bar上,按下"ayaw —— 这一步是把bar(包括前面的空格)复制到a寄存器里(用自定义寄存器避免覆盖默认剪贴板)
  • 光标移到左边的单词foo上,按下daw —— 删除foo和后面的空格,此时文本变成+ bar,foo会被存在默认剪贴板(0寄存器也会同步保存)
  • 按下"ap —— 把a寄存器里的bar粘贴到当前位置,现在文本变成bar + bar
  • 移动光标到+后面的bar上,按下"0p —— 把0寄存器里的foo粘贴过来,最终就得到了bar + foo

如果觉得记寄存器麻烦,也可以用更简洁的剪切粘贴组合:

  • 光标在bar上,daw删除它,文本变成foo +
  • 光标移到foo前面,按p粘贴bar,变成bar foo +
  • 光标移到foo后面的空格,按x删掉,再移到+后面按p粘贴foo,同样能完成交换。

方法二:正则表达式替换

如果需要批量处理或者快速修改一行内容,可以用Vim的替换命令:
对于当前行,按下:s/\(\w\+\) \([+*/-=]\) \(\w\+\)/\3 \2 \1/ 回车即可。
解释一下这个正则:

  • \(\w\+\) 匹配第一个单词
  • \([+*/-=]\) 匹配单个运算符(你可以根据需要添加更多运算符,比如<>!等)
  • \(\w\+\) 匹配第二个单词
  • \3 \2 \1 就是把三个分组倒过来,实现交换

如果要处理整个文件,把命令改成:g/\(\w\+\) \([+*/-=]\) \(\w\+\)/s//\3 \2 \1/g 就行。

进阶:自定义映射简化操作

如果你经常需要做这个操作,可以在~/.vimrc里加一个自定义映射,比如:

nnoremap <leader>sw :s/\(\w\+\) \([+*/-=]\) \(\w\+\)/\3 \2 \1/<CR>

之后只要在目标行按下<leader>sw(默认<leader>是反斜杠\),就能一键交换跨运算符的两个单词,效率拉满!

内容的提问来源于stack exchange,提问作者JongHyeon Yeo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:32:17