是否有一个脚本允许我编辑多个文件,就好像它们是VIM中的一个文件一样?

时间:2010-12-25 02:38:03

标签: vim vi

我更喜欢在一个大文件而不是许多独立文件中进行编辑,但由于语言,源代码控制和团队配合的偏好,我需要输出到许多文件。

我正在寻找的内容将通过源目录中的所有文件进行递归,并生成一个要在VIM中编辑的文件,并使用特殊的文件分隔符标记。在保存时,它会根据所做的更改,以理智的方式将更改保存到正确的文件中。

这样的事情是否存在?

3 个答案:

答案 0 :(得分:2)

沙皮

好吧,您可以使用shar(1),但它会在每行前面放置一个X,您可能会觉得这很烦人。 (Shar来自我的Mac,但在我的Linux系统上,你需要添加一个包。)

Shar本身就是一个简短的shell脚本,所以你可以很容易地修改它而不用X.

您可以尝试将/ usr / bin / shar复制到/ tmp并将此差异应用于patch(1)

--- /usr/bin/shar   2009-07-13 22:26:18.000000000 -0700
+++ /tmp/shar2  2010-12-24 19:05:34.000000000 -0800
@@ -65,8 +65,8 @@
        echo "mkdir -p $i > /dev/null 2>&1"
    else
        echo "echo x - $i"
-       echo "sed 's/^X//' >$i << 'END-of-$i'"
-       sed 's/^/X/' $i
+       echo "cat >$i << 'END-of-$i'"
+       cat $i
        echo "END-of-$i"
    fi
 done

答案 1 :(得分:1)

它让我想起了vimballs格式。但是,它意味着将文件扩展到用户runtimepath目录。

换句话说,您可以列出要加入的所有文件并应用:MkVimBall(此处为an example)。 然后,对于提取,您必须暂时(即在提取后保存并恢复其值)将&runtimepath设置为项目的根目录,然后使用:so %进行提取。

您还必须使用各种选项,例如&filetype等。

这是一个肮脏的黑客,但是......它应该完成这项工作。

答案 2 :(得分:1)

您可以使用bufdowindo在所有已打开的缓冲区上重复执行命令,而不是将多个文件转储为一个文件,处理此文件然后将其分开,您可以使用bufdo或{{1}}重复执行命令:打开要处理的缓冲区,然后转换{{1}}命令,它将适用于每个打开的文件:http://vimdoc.sourceforge.net/htmldoc/windows.html#list-repeat