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

如何用vim-surround或vim-emmet为多行文本分别包裹<p>标签

嘿,我刚好碰到过类似的情况,给你分享两种靠谱的方法,分别用vim-surround和vim-emmet来实现逐个把hello world包裹进<p>标签:

方法一:用vim-surround搞定(两种小技巧)

技巧1:宏录制(适合不拆行的场景)

如果你的文本是一行连在一起的:hello world hello world hello world hello world,可以这么操作:

  1. 把光标移到第一个hello的首字母h上
  2. 按v进入可视模式,然后按W选中整个hello world(W会选中包含空格的整段词)
  3. 按S<p>,这时候第一个hello world就被包裹成<p>hello world</p>了
  4. 开始录制宏:按qa(a是宏的名字,你也可以用其他字母)
  5. 按n跳到下一个hello world的位置(前提是你先搜过hello world,可以先按/hello world回车,或者用f h定位下一个h)
  6. 重复选中包裹的操作:vW S<p>
  7. 按q停止录制宏
  8. 按@a两次,剩下的两个hello world就自动被包裹了

技巧2:拆行后批量操作

如果文本行数多,宏录制麻烦,可以先拆行再批量处理:

  1. 执行替换命令把每个hello world拆成单独一行:
    :%s/ hello world/\r&/g
    
    执行后文本会变成每行一个hello world
  2. 按ggVG选中所有行(进入可视行模式)
  3. 按S<p>,所有行的内容都会被单独包裹进<p>标签
  4. 如果需要把标签变回一行用空格分隔,执行替换把换行换成空格:
    :%s/\n/ /g
    

方法二:用vim-emmet实现

Emmet的批量包裹也很方便,核心是先把文本拆成多行,再用Emmet的批量生成:

  1. 同样先把文本拆成每行一个hello world,用刚才的替换命令:
    :%s/ hello world/\r&/g
    
  2. 按ggVG选中所有行
  3. 按Ctrl+y ,(这是vim-emmet的展开/包裹快捷键),然后输入p*,回车后每行的内容都会被自动包裹进单独的<p>标签
  4. 同样如果需要变回一行,用:%s/\n/ /g替换换行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:35:17