0

由于未公开的原因,假设我在几十个子目录中有许多相同的 README.txt 文件。在我的幻想世界中,我可以运行这个:

vim --magic-mindreading-flag */README.txt

而不是按顺序为我编辑文件,vim 会以某种方式识别它们是相同的,并将我的更改同时保存到所有文件中,并且神奇地知道我想要什么。

请给我以下几点:

  1. 如何使用 shell 命令执行此操作。
  2. 关于引用单个权威副本(例如使用符号链接)的讲座
  3. 使用您知道的支持它的编辑器的建议。

这是关于 vim 的,多么棒。

奖励:如果文件不相同,请获取 vim will 发出警告。

4

4 回答 4

3

如果它们当前相同,您想对它们进行相同的修改,并且它们要保持相同,我会这样做:

编辑第一个,然后删除所有其他。然后我会将所有其他人符号链接到第一个。

于 2010-02-19T03:17:03.460 回答
1

您可以在命令行上使用 vim。例如,将所有“旧”替换为“新”(但仅适用于 1 个文件)。

vim -c '%s/old/new' -c "wq" file

查看 vim 文档以查看是否可以为多个文件(:bn等)执行此操作。正如其中一条评论所建议的,vim 是一个编辑器,与 sed/ed/awk 相同。它的目的是编辑文件,因此使用 *nix 工具是一样的。您可能要考虑编写一个脚本来做到这一点。

于 2010-02-19T02:43:42.340 回答
1

我将使用vimdiff同时编辑所有 README 文件(向您展示任何差异;您可以使用 CTRL-W | 最大化当前窗口)。

然后要保存所有文件,请使用类似的命令:SaveAll(仅保存您的参数,而不是您可能打开的任何其他缓冲区)。

    function SaveAll()
        let i = 0
        "can't save other files while their buffers are open
        exe 'on'
        while i < argc()
            exe 'w! ' . argv(i)
            let i = i + 1
        endwhile
    endfunction

    command SaveAll call SaveAll()
于 2010-02-19T03:08:43.710 回答
0

好吧,您可以将更改记录到第一个文件中。我不知道记录是否会通过缓冲区的变化持续存在,我怀疑并且假设不会。如果只有几十个文件,我只会手动播放所有文件的录制序列。如果您想要一个长期的、较少临时性的解决方案,我希望可以创建一个在缓冲区之间循环并normal @a在每个缓冲区上执行的 vim 函数(假设您已将更改记录到寄存器 a 中的第一个缓冲区),然后:wq在下一个缓冲区执行并重复。

在 vim 中,执行:help 10.1:help complex-repeat.

我认识到这不能满足您的要求“并且不是按顺序为我编辑文件,vim 会以某种方式识别它们是相同的并同时保存我对所有文件的更改。”

于 2010-02-19T02:13:23.653 回答