0

理由は明らかにされていませんが、数十のサブディレクトリに同じ README.txt ファイルが多数あるとします。私のファンタジーの世界では、これを実行できます。

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

ファイルを順番に編集するのではなく、vim はどうにかしてファイルが同一であることを認識し、私の変更をすべてのファイルに同時に保存し、私が何を望んでいるかを魔法のように認識します。

次のことを教えてください。

  1. シェルコマンドでこれを行う方法。
  2. 単一の正式なコピーの参照に関する講義 (シンボリック リンクなどを使用)
  3. サポートしていることがわかっているエディターを使用することをお勧めします。

これはvimについてであり、どれほど素晴らしいかです。

ボーナス:ファイルが同一でない場合に警告するvimの意志を取得します。

4

4 に答える 4

3

それらが現在同一であり、それらを同一に変更したい場合、および同一のままにする場合、私はこれを行います:

最初の 1 つを編集してから、他のすべてを削除します。次に、他のすべてを最初のものにシンボリックリンクします。

于 2010-02-19T03:17:03.460 に答える
1

コマンドラインでvimを使用できます。たとえば、すべての「古い」を「新しい」に置き換えます (ただし、1 つのファイルのみ)。

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

:bnvimのドキュメントを調べて、複数のファイル(など)に対して実行できるかどうかを確認してください。コメントの 1 つが示唆したように、vim は sed/ed/awk と同じエディターです。その目的はファイルを編集することなので、*nix ツールを使用することはまったく同じです。そのためのスクリプトを作成することを検討してください。

于 2010-02-19T02:43:42.340 に答える
1

すべての README ファイルを同時に編集するために使用vimdiffします (違いを表示します。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.

これはあなたの要求を満たさないことを認識しています。

于 2010-02-19T02:13:23.653 に答える