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

如何在VIM中提取多行点分隔符间的第二个单词并批量复制粘贴?

无插件VIM批量提取点分隔的第二个单词方法

原文本示例:

1 somename.xyz.something
2 so.someday.zzzz
3 text.example.fese.efsse

预期提取结果:

5 xyz
6 someday
7 example

下面是几种无需插件的高效方法:


方法一:替换命令直接生成目标内容

这是最快捷的方式,适合直接修改或复制提取结果:

  1. 用可视模式选中需要处理的所有行(比如ggVG选中全文,或v拖动选中目标行)
  2. 执行替换命令:
    :'<,'>s/^.*\.\([^.]*\)\..*/\1/g
    
    命令解释:匹配每行中第一个点和第二个点之间的内容(\([^.]*\)捕获第二个单词),将整行替换为捕获到的内容
  3. 选中修改后的行,按y复制,跳转到目标位置按p粘贴即可
  4. 若不想修改原文本,可先复制原行到目标位置,再对复制的行执行上述替换命令

方法二:宏录制批量提取

适合需要保留原文本,逐行提取的场景:

  1. 光标定位到第一行开头
  2. 按qq开始录制宏(q后接寄存器名,这里用q)
  3. 依次执行:
    • f.:跳到第一个点的位置
    • l:向右移动一个字符(跳过第一个点)
    • t.:跳到第二个点的前一个字符
    • "Ay:将选中的内容追加到寄存器a(避免覆盖)
    • j:跳到下一行开头
  4. 按q停止录制
  5. 执行2@q(数字是剩余行数)批量提取所有行的第二个单词
  6. 跳转到目标位置,按"ap粘贴寄存器a中的内容

方法三:全局命令批量提取

无需手动选中,直接对所有行执行提取操作:

  1. 先清空寄存器a(避免残留内容):qaq
  2. 执行全局命令,将每行的第二个单词追加到寄存器a:
    :g/^/normal! f.lt."Ay
    
  3. 跳转到目标位置,按"ap粘贴提取的内容

内容的提问来源于stack exchange,提问作者Alwin Brauns

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 19:48:25