在Vim的:global命令中执行norm后如何追加运行其他命令
Vim 批量提取
<p>标签内容并拆分句子的命令合并方案 需求说明
现有若干包含多句文本的HTML <p> 标签,需要提取标签内的内容,且将每一句单独放在一行,要求单次执行命令即可完成所有段落的处理。
原始内容示例
<p>Hello. This is Alan. I am a wookie.</p> <p>Hello. This is Bob. I am an ewok.</p>
期望输出结果
Hello. This is Alan. I am a wookie. Hello. This is Bob. I am a ewok.
现有分步操作
- 执行
:g/<p>/norm ditVp可提取所有<p>标签的内容 - 光标放在提取完成的段落上执行
:s/\.\s\?/.\r/g可拆分所有句子为单行显示
合并后可单次执行的命令
直接用 | 拼接两个操作即可,单次执行就能完成全部处理:
:g/<p>/norm ditVp | s/\.\s\?/.\r/g
如果Vim环境中|存在映射冲突,也可以使用execute写法保证兼容性:
:g/<p>/execute "normal! ditVp" | s/\.\s\?/.\r/g
实现逻辑
:g 全局命令会匹配所有包含<p>的行,对每一行先执行normal模式下的标签内容提取操作,紧接着对当前处理的内容执行句子拆分替换,无需分步操作。
内容的提问来源于stack exchange,提问作者Oragon Efreet
相关产品推荐
相关产品推荐

