vim - 如何在 Vim 中自动编辑多个文件?

标签 vim sh

我有很多文件,我想在每个文件中删除第 1 行到第 55 行,在第 25 行到第 35 行添加注释前导(例如 //),然后将更改保存到新文件中。
如何单独使用 Vim 或在 Bash 脚本的帮助下自动执行此操作?

最佳答案

尽管使用 edsed是一种普遍做法1
在这种情况下,有时使用 Vim 会方便得多。的确,
而不是写一个 ed - 有点盲目的喜欢脚本,它经常
更容易首先使用其中之一执行所需的操作
在 Vim 中交互文件:

vim -w log.vim file1.txt
然后在其余文件上重复它:
for f in file*.txt; do vim -s log.vim "$f"; done
对于您的示例用例,log.vim文件可能有
类似以下内容:
gg55dd:25,35s/^/\/\/ /
:w %_new
:q!
请注意,要使用新名称保存文件,您不应键入它
直接,而是使用 %替换,如上所示——否则
以下所有文件的所有修改都将保存到
同一个文件,每次都覆盖其内容。或者,您可以
事先复制文件,然后就地编辑副本
(通过简单地发出 :w 命令来保存每个
论据)。
这种方法的优点是您可以进行所有更改
以交互方式,确保您在
至少在其中一个文件上,在对其余文件执行编辑之前
其中。

1 当然,您可以在 ed 中使用 Vim - 也像时尚:
for f in file*.txt; do vim -c '1,55d|25,35s/^/\/\/ /|w! '"${f}_new"'|q!' "$f"; done

关于vim - 如何在 Vim 中自动编辑多个文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5932102/

相关文章:

java - 在 linux 上从终端运行 jar 文件

bash - 是否可以在 bash 中复制 vim 的 `zz` 的效果?

ruby - 在 vim 中,将 Ruby hashrockets 更改为名称 :value notation? 的有效方法是什么

regex - 在 vim 上搜索并转换为小写

windows - 我可以在 Windows 任务计划程序中执行 .SH 文件吗?

docker - 如何让/etc/profile 在 Alpine/Docker 中自动运行

linux - 当变量再次具有特殊字符时,如何在 sed 命令中使用变量?

java - 如何从 npm ls 树输出中提取根级元素?

vim:如何将 formatprg 错误重定向到 echoerr?

system - 如何在 vim system() 调用中将参数传递给脚本?