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

如何在Vim中通过Ruby脚本处理选中内容并替换为返回值?

如何在Vim中用Ruby处理选中内容并替换为脚本返回值

一、直接在Vim中嵌入Ruby代码处理

如果你想直接在Vim里编写Ruby逻辑处理选中内容,步骤非常简单:

  1. 先用**可视模式(v/V)**选中你要处理的文本(比如例子里的12|22|33)
  2. 按下:键,Vim会自动补全选中范围的标记'<,'>,这时候输入ruby加上你的处理代码即可:
:'<,'>ruby Vim::Range.new(Vim::Mark.get("'<"), Vim::Mark.get("'>")).each { |line| 
  line.text = line.text.split("|").map(&:to_i).map { |num| num * 2 }.join("|") 
}

这段代码的逻辑:

  • Vim::Range.new(...)获取你选中的文本范围(支持多行处理)
  • 遍历每一行,把行内容按|分割成数组,转成整数后翻倍,再用|拼接回去
  • 最后把处理后的内容赋值给line.text,直接替换原行内容

如果只是处理单行,也可以简化成更紧凑的版本:

:'<,'>ruby l = Vim::Buffer.current.line(Vim::Mark.get("'<")[0]); Vim::Buffer.current.set_line(Vim::Mark.get("'<")[0], l.split("|").map(&:to_i).map{|n|n*2}.join("|"))

二、Vim原生替代方案(更简洁高效)

其实对于你这个数字翻倍的场景,完全不需要Ruby,用Vim自带的substitute命令就能搞定:

同样先选中目标内容,然后执行:

:'<,'>s/\d\+/\=submatch(0)*2/g

拆解一下这个命令:

  • s/\d\+/:匹配每一个连续的数字(\d\+是正则表达式,匹配一个或多个数字)
  • \=:告诉Vim后面是一个表达式,需要计算出替换值
  • submatch(0)*2:把匹配到的数字(submatch(0)代表整个匹配内容)乘以2
  • g:全局替换,一行内所有匹配的数字都会被处理

这个方法不需要依赖Ruby环境,对于这种简单的文本处理场景非常高效。

内容的提问来源于stack exchange,提问作者23tux

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 07:59:08