Vimの複数のインスタンス間でコマンド履歴はどのように解決されますか?


15

Vimはexコマンドの履歴を保持し(:and 経由でアクセス可能q:)、その履歴は終了後も保持されます。

Vimの複数のインスタンス(同じユーザー、同じホームディレクトリ)を実行している場合、Vimはコマンド履歴間でどのように仲裁しますか?終了する最後のプロセスが優先されるようです。すべてのインスタンスのコマンド履歴を保持する方法はありますか?


1
本当に?この歴史は私のために辞めた後も持続しません。(Vim 7.4.52、Ubuntu 14.04)
ドアノブ

3
@Doorknobあなた~/.viminfoがあなたのものであることを確認してください。よくある間違いは、実行する人sudo vim ...が、vimを自分のユーザーとして実行したことがない場合~/.viminfo、rootとして作成することです。それが問題であれば、特権ファイルの使用sudoeditまたはsudo -e編集の学習をお勧めします。
ジェームスサン

@jamessanええ、それは確かに問題だったようです。chown自分の.viminfoを元に戻すと修正されました。(所有権がどのようにルートに変更されたかはわかりませんが、私は常に使用しているsudoeditので、まあまあです。)
Doorknob

回答:


10

タイトルの質問に対する答えは、あなたが観察したものです。vimユーザーマニュアルから:help 21.3

Vimを複数回実行すると、最後に終了したものがその情報を保存します。これにより、以前に保存されたVimsに保存されていた情報が失われる可能性があります。各アイテムは一度だけ記憶できます。

ただし、viminfoファイルのファイル名(グローバルマークやレジスタコンテンツなど、設定されている場合はコマンド履歴が保存される場所)は変更可能です!これは、vimの異なるプロジェクトまたはインスタンスに対して異なる「履歴」を設定できることを意味します。プロジェクトごとに複数のvimインスタンスを実行しないと仮定すると、vimrc(または他のプロジェクト設定プラグイン)を介してviminfoファイル名を管理することは、これを処理するための優れた方法です。

代替viminfoファイルのセットアップ

プロジェクトレベルの管理では、viminfoを別のファイルに保存するようにvimを構成します。これは、終了する前に実行中のvim内で、またはvimrcによって実行できます。たとえば、vimrcに特定のディレクトリをプロジェクトに属するものとして検出する行がある場合があります。

:set viminfo+=nPath/to/custom/viminfofile

ディレクトリに基づいてvimrcがこれを自動的に設定する例:

 if getcwd() == "/projects/projA"
     set viminfo+=n~/.viminfo-projA
 endif

上記の結果、vimが/ projects / projAディレクトリで起動されると、プロジェクト固有の履歴が起動時にロードされ、終了時に保存されます。

起動時に代替viminfoをロードします

これは、プロジェクトレベルで履歴を管理せずに、履歴を横に保存して後で読み込む場合に適しています。

最初に、履歴を保存するには、終了する前に上記のようにviminfoオプションに追加します。次に、履歴をロードするには、-iオプションを使用してvimを起動します

vim -i Path/to/custom/viminfofile

viminfoファイルを保存するためにvimを終了したくない場合は、:wv:wviminfo)を使用できます。これにより、上記のn設定に従ってvimを終了せずにviminfoファイルが保存されます。また、:wv SomeOtherFileviminfoオプションの設定とは異なる場所に保存することもできます。これは、終了時に使用するファイル名を設定するよりも便利かもしれませんが、vimが終了したらデフォルトファイルを使用することを止めません。

たとえば、最初のvimの場合:

:wv ~/customInfo

そして、2番目のターミナルで:

vim -i ~/customInfo

または、2番目のvimがすでに実行されていて、viminfoをロードする場合:

:rv ~/customInfo

ことを注意:wvして:rv終了したり、起動時に読み込むファイルの名前で保存されますファイルのvimの名前を変更しないでください。

追加情報

説明set viminfo+=nSomePath:setコマンドを使用して、という名前のオプションを調整しますviminfo+=すべてを変更しないで、我々はオプションに追加する示します。nviminfoのファイル名を指定するオプションを追加します。直後にn、私たちは持ってSomePathはviminfoを保存するために使用されるファイル名になりますました。

wv:help wv)のドキュメントは、このコマンドが最初にviminfoファイルを読み取り、次に古い情報と新しい情報をマージすることを示しています。これまでのところ、この場合のマージの動作に関する情報はありませんが、現在のセッションで設定されていない未知のファイルとレジスタのマークを保持していると思います。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.