カスタム.vimrcを使用するようにVimに指示するのは簡単ですが、〜/ .vimの代わりに代替パスを使用するように指示する方法はありますか?


15

デフォルトの代わりに使用vim -u filenameすることができfilenameます.vimrc。スーパーユーザーとして実行していも、ユーザーコンテキスト(su)を切り替えて使用する場合、この方法を使用し .vimrcいます。

デフォルトでVim をコマンドラインから別のフォルダーにポイントできるように、フォルダーに対して同じことをどのように実現できますか?~/.vim


私が達成したいこと

さて、ユーザーjoeHOME=/home/joe)とユーザーrootHOME=/root)を想定してください。ユーザーにjoeは、vim次のようなエイリアスセットがあります(ただし、元々は$HOME変数を使用してこれを動的に設定します)。

alias vim='vim -p -N -n -i NONE -u "/home/joe/.vimrc"'

次に、ユーザーjoesudo su -(ただし、魔法を追加して)の線に沿って何かを実行し.bashrc/home/joeからにロードされるその他のグッズを作成しますroot。ユーザーrootは、上記とまったく同じエイリアスvimセットを持っています。

問題は、これ.vimrcがさまざまなシステムやさまざまなシナリオで使用されることです。多くの場合、ジョーのアカウントは呼び出されますがjoe、時にはのようlocal.joeなものになり、の値が異なります$HOME。そのため、~/.vimフォルダへの絶対パスをハードコーディングすることは良い考えではないようです。ただし、上記のシナリオでは、ユーザーにrootはフォルダーが/root/.vimありませんが、ロードされた.vimrc/home/joe/.vimrc)を介してデフォルトで存在することが予想されます。

私が達成したいのは、できればコマンドラインで- /home/joe/.vim起動時にVimが下からプラグインなどを使用するようにrootすることaliasです(示されているように設定されていると仮定-他のケースは無視できます)。VimScriptを介した動的メソッドがある場合は、ポインターを指定してください。しかし、などの変数を使用$HOMEすると、キャッチ22につながると思います。


おそらく古き良きでこれを行うことができますln。'mv〜/ .vim〜/ .vim-whatever && ln -s〜/ .vim-whatever〜/ .vim`のように、.vimrc。あなたは簡単に一つの方法または他の切り替えることができますので、いくつかのbashのエイリアスを使用して、すべてのものを包む

回答:


9

Vimは〜/ .vimを検索します。これは、そのディレクトリが「runtimepath」のデフォルトリスト(「rtp」と略記)にあるためです。Vimに他の場所を探すように指示するには、別の「rtp」値を完全に指定するか、たとえば、substitute()の呼び出しを使用してデフォルトを編集する必要があります。Vimが最初に設定ファイルの別の場所を検索するようにしたい場合は、〜/ .vimも検索することに注意してください。とても簡単です:

vim --cmd 'set rtp^=alternate_dir'

見る

:help --cmd
:help :set^=

.vimを別のディレクトリに置き換えるには、もう少し入力する必要があります。

vim --cmd 'let &rtp = substitute(&rtp, "\.vim", "alternate", "g")'

~/.vim別のパスに置き換えようとしましたが、に一致しなかった~ため、先に進んで自分の持っているものを投稿しました。

編集

~「rtp」の値を一致させることができなかった理由は、値が&rtpの出力ではなく値として取得される場合です。:set rtp?~ユーザのホームディレクトリの完全パス名に展開されます。~結果にはありません。

次の作品。

vim --cmd 'let &rtp = substitute(&rtp, $HOME."/\.vim", "alternate", "g")'

回答に時間を割いてくれてありがとう。これは非常に有望に見えます。明日はこれを少しいじって、どうなるか教えてあげましょう。VimScriptのfuがもっと強くなればいいのですが、私はそれに取り組んでおり、これは有望な方向を示しています。
-0xC0000022L

@ 0xC0000022L:あなたが示した方法が\\~仕事をします。Bashの1つのエスケープ、私は数える?とにかく、VimScriptの処理方法について何かが異なるため、これはまだ機能しません~
-0xC0000022L

持っていると思う。:set rtp?「〜/ .vim」と表示されますが、フルパス名に:echo &rtp展開さ~れることに注意してください。次のように動作するようです: `vim --cmd 'let&rtp = substitution(&rtp、$ HOME。" / \。vim "、" alternate "、" g ")'。回答を更新します。
ゲイリージョン

ありがとう、非常に興味深い微妙な違い。私の特定のケースでは、いくつかの問題がより問題になりますが、受け入れます。これにより、さらに多くのことがわかりました。
0xC0000022L

3

選択した.vimrcで、ランタイムパスを指定できます。

let &runtimepath=/path/to/specific/vim/folder

あなたがあなたの人を使用している場合、あなたは.vimrcあなたの個人.vimディレクトリにこれを設定することができ、それはsuあなたの通常のアカウントの両方で動作するはずです。


これは、コマンドラインからではありません。これを動的にする方法はありますか?参照してください、私$HOMEは自分のアカウントでそのようなものを使用する場合、それは解決されます/home/joeが、rootとしてはまだ/root...だから何も勝ちません。これ.vimrcは、プラットフォームとVimのバージョン間で機能するはずであり、絶対パスを設定すると完全に壊れます。しかし、答えてくれてありがとう。
-0xC0000022L

@ 0xCあなたはすでにコマンドラインからvimrcを指定しており、これは順番にランタイムパスを指定しています。vimrcでは、スクリプトを実行して変数を定義できるため、質問を正確な結果で編集する場合は、おそらくそれを行う方法を見つけることができます。
ポール

私の質問を編集しました。忍耐をありがとう:)
0xC0000022L

ユーザー.bashrcでは、変数を設定できますか?たとえば$REALHOME、それは免除され、sudo reset_envそれを基礎として使用できますrtpか?
ポール

それはのように聞こえる1つの実行可能なオプション。ただし、この方法で変数を密輸する方が簡単だとわかりましたalias sudosu='sudo su -l root -c "REALHOME='\''/home/joe'\'' /bin/bash --rcfile /home/joe/.bashrc"'
。– 0xC0000022L
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.