如何用vim-surround或vim-emmet为多行文本分别包裹<p>标签
嘿,我刚好碰到过类似的情况,给你分享两种靠谱的方法,分别用vim-surround和vim-emmet来实现逐个把hello world包裹进<p>标签:
方法一:用vim-surround搞定(两种小技巧)
技巧1:宏录制(适合不拆行的场景)
如果你的文本是一行连在一起的:hello world hello world hello world hello world,可以这么操作:
- 把光标移到第一个
hello的首字母h上 - 按
v进入可视模式,然后按W选中整个hello world(W会选中包含空格的整段词) - 按
S<p>,这时候第一个hello world就被包裹成<p>hello world</p>了 - 开始录制宏:按
qa(a是宏的名字,你也可以用其他字母) - 按
n跳到下一个hello world的位置(前提是你先搜过hello world,可以先按/hello world回车,或者用f h定位下一个h) - 重复选中包裹的操作:
vW S<p> - 按
q停止录制宏 - 按
@a两次,剩下的两个hello world就自动被包裹了
技巧2:拆行后批量操作
如果文本行数多,宏录制麻烦,可以先拆行再批量处理:
- 执行替换命令把每个
hello world拆成单独一行:
执行后文本会变成每行一个:%s/ hello world/\r&/ghello world - 按
ggVG选中所有行(进入可视行模式) - 按
S<p>,所有行的内容都会被单独包裹进<p>标签 - 如果需要把标签变回一行用空格分隔,执行替换把换行换成空格:
:%s/\n/ /g
方法二:用vim-emmet实现
Emmet的批量包裹也很方便,核心是先把文本拆成多行,再用Emmet的批量生成:
- 同样先把文本拆成每行一个
hello world,用刚才的替换命令::%s/ hello world/\r&/g - 按
ggVG选中所有行 - 按
Ctrl+y ,(这是vim-emmet的展开/包裹快捷键),然后输入p*,回车后每行的内容都会被自动包裹进单独的<p>标签 - 同样如果需要变回一行,用
:%s/\n/ /g替换换行
内容的提问来源于stack exchange,提问作者jedi
相关产品推荐
相关产品推荐

