外部ファイルから.vimrcを読み取るにはどうすればよいですか?


24

.vimrc外部ファイルから変数の値を読み取るように変更したいと思います。これどうやってするの?

具体的には、友人と私はgitリポジトリを.vimファイルと共有しますが、設定に必要なものにはいくつかの小さな違いがあります。そのため、ほとんどのファイルは共通ですが、次のようにifステートメントを使用して、ユーザー固有のセクションを読み込むかどうかを決定します。

let whoami = "user2"
if whoami == "user1"
...

.vimrcソース管理外の共通をチェックした後、それぞれのlet whoami割り当てを変更して、独自のセクションがロードされるようにする必要があります。代わりに、私たちごとに異なる可能性があり、vimがその変数値をロードする個別のファイルを保持したいと思います。

これに関する別の角度は、vimが.vimディレクトリ内のすべてのファイルを自動的に読み取るかどうかです。その場合、username.vimと呼ばれるシンボリックリンクをそこに入れ、それを私たちそれぞれに異なる外部ファイルにリンクできます。

回答:


35

メインの.vimrcファイルで:

source otherVimScriptFilePath.vim

そのファイルに変数ステートメントを入れるだけです:

" otherVimScriptFilePath.vim
let whoami = "user1"

2
参考-私の状況ではlet whoami = ""source行の直前に行うのが役立ちました。外部ファイルのロードに失敗した場合、変数が存在し、設定されていない変数に対して以前に設定したエラーメッセージが表示されます
ネイサンロング

2
@GorillaSandwich:Windowsにはシンボリックリンクがないため、これを使用してWindowsマシンでvimrcを取得します。これと他のすべてのドットファイルを含むSVNフォルダーがあります。svnフォルダーに実際のソースを提供する_vimrcがあります。
ロバートSチャシオ

@GorillaSandwich:のための私の答えを参照してくださいsilent! source一部
アキラ

6

try / catchを使用する

この質問を聞いてから、外部ファイルをロードするための別のユースケース、つまりマシン固有の調整を考え出しました。

特定のマシンで微調整する必要がある場合とそうでない場合があるため、a try/catchを使用して外部ファイルをロードしています。そのようなファイルがなければ、黙って失敗させます。

" If there are any machine-specific tweaks for Vim, load them from the following file.
try 
  source ~/.vimrc_machine_specific
catch
  " No such file? No problem; just ignore it.
endtry 

5

最後の質問に答えるために、ファイル~/.vimは自動的に読み込まれませんが、すべてのファイルは読み込まれ~/.vim/pluginます。


2
そして、いくつかの他の場所の下に〜/て.vim( 、)afterautoload
アキラ

4

:sourceコマンドを使用して〜/ .vimrcに別のファイルをロードさせることができます。たとえば、独自のコマンドをそれぞれ〜/ .myvimrcに入れて、これらのコマンドを次のようにロードできます。

source ~/.myvimrc

または、あなたが考えていたように、それぞれ次のようにそのファイルにあなたの名前を入れることができます:

let user = "user1"

そして、これを〜/ .vimrcに入れます:

source ~/.myvimrc
if user == "user1"
    " do this
elseif user == "user2"
    " do that
else
    echo "Invalid user"
endif

ただし、ファイルに名前を入れるのではなく、akiraが示唆するように$ USERを使用するか、次のようにuserを使用して設定できますwhoami

let user = substitute(system('whoami'), '\n', '', '')

system()の出力には通常、最後に '\ n'が付いているため、substitute()関数が必要です。


whoamiWindows上では動作しません
アキラ

@akira:確かに、GorillaSandwichはWindowsではなくUnixを使用しています。少なくともWindows XPでは、Windowsでも$ USERは機能しません。
ゲイリージョン

ただ、Windowsではその$ USERNAMEと言います。主なポイントはwhoami、新しいプロセスを生成することです。エディターを開くと、高速であり、何度も(無駄に)作業を行うことはありません。
アキラ

2

ログインしたユーザーの名前は、$ USER環境変数で利用できます。その変数に簡単にアクセスできます:

:echo $USER

だから、ただ使う

execute "silent! source vimrc." . $USER

vimrcで、ユーザー固有の設定を

vimrc.joe

またはあなたのログイン名は何でも


0

あなたのvimrcがどのように見えるのか分かりませんので、これは実行できないかもしれませんが、あなたとあなたの友人が共有する大きな部分がある場合、それらを別々のプラグインに分割したいかもしれません。~/.vim/pluginディレクトリにファイルを追加して、起動時にロードすることができます。(それらはアルファベット順に読み込まれます- :scriptnamesチェックに使用します。)

そうすれば、それぞれが完全にユニークなvimrcを持つことができますが、一般的な設定はすべてプラグイン内にあります。それらを論理的に分割すると、他の人と簡単に共有できます。

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