Vim替换换行符

4

我之前一直不喜欢使用 Vim,但现在我已经妥协了。它可以轻松地处理大文件。

情境:我有一个很大的文本文件,想在每行开头和结尾加上一个竖线(|)。

问题:这些 Vim 和其他变种都没能解决问题:

:%s/$/|\$|
:%s/\r/|\r|
:%s/$/|\r|

我猜这应该是一个简单的修复问题,但搜索Google和Stack没有帮助。

2个回答

6
你差点就成功了:
:%s/^\|$/|/g

^\|$ 表示行首或行尾。在 Vim 正则表达式中,| 管道符会被转义。紧随其后的是 /|/g -- 全局替换为 |


谢谢你,Michael。命令完美地运行了。你关于命令为什么有效的额外评论非常有帮助。我感觉管道可能需要转义。 - Paulb

5

个人而言,我更喜欢“在每一行前后添加竖杠字符”的表达方式:

:%s/.*/|&|

这对于我来说更加直观,比“在行的开头或结尾替换一个不存在的、想象中的字符”更容易理解。它也依赖更少的魔法字符(^、$、引号内的|,这些都很笨拙,容易出错。(我的意思是,你是否记得引用正则表达式中的|?你知道$和\_$之间的区别吗?你知道这些中的一些,如果不是全部,取决于vim的“魔术配置”吗?)上述方法没有这些问题。

我花了一天时间思考这个问题。有趣。我也喜欢你的答案。天哪..不止一个好答案 ;) 你的命令结果完美无缺。目前我还不够有知识来判断哪个更好。 - Paulb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接