web-dev-qa-db-ja.com

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

デフォルトのvim -u filenameの代わりに.vimrcを使用してfilenameを使用できます。ユーザーコンテキスト(su)を切り替えてmy.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のアカウントはjoeと呼ばれますが、local.joeなどのようになり、$HOMEの値が異なる場合があります。したがって、~/.vimフォルダーへの絶対パスをハードコーディングすることは、良い考えではないようです。ただし、上記のシナリオでは、ユーザーrootにはフォルダー/root/.vimがありませんが、これはデフォルトで、ロードされた.vimrc/home/joe/.vimrc)を介して存在すると予想されます。

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

15
0xC0000022L

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")'
9
garyjohn

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

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

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

3
Paul