デフォルトのvim -u filename
の代わりに.vimrc
を使用してfilename
を使用できます。ユーザーコンテキスト(su
)を切り替えてmy.vimrc
をスーパーユーザーとして実行している場合でも、この方法を使用しています。
デフォルトで~/.vim
であるフォルダーに対して同じまたを実現するにはどうすればよいですか?Vim コマンドから行代替フォルダに?
では、ユーザーjoe
(HOME=/home/joe
)とユーザーroot
(HOME=/root
)を想定します。ユーザーjoe
には、次のようなvim
のエイリアスセットがあります(ただし、元々は$HOME
変数を使用して動的に設定されています)。
alias vim='vim -p -N -n -i NONE -u "/home/joe/.vimrc"'
次に、ユーザーjoe
がSudo 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の問題が発生すると思います。
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")'
選択した.vimrcで、ランタイムパスを指定できます。
let &runtimepath=/path/to/specific/vim/folder
個人.vimrc
を使用している場合は、これを個人用.vim
ディレクトリに設定することができ、su
と通常のアカウントの両方として機能するはずです。