VIM構成ファイルを複数のコンピューター間で共有していますが、一部の設定を特定のコンピューターに固有にする必要があります。
たとえば、高解像度のラップトップのフォントサイズは、低解像度のデスクトップとは異なる必要があります。さらに重要なことに、WindowsでのgVIMはよりウィンドウのように動作し、OSXでのMacVimはより多くのmaccyで動作し、LinuxのgVIMは通常どおりに動作することを望みます。 (それは奇妙な感情かもしれませんが、私はOSを切り替えるときにメンタルモードを切り替えるのに非常に慣れています)
.vimrc
マシン依存またはOS依存でいくつかの設定を行う方法はありますか?
.vimrc
でのOS検出:
if has('win32')
......
elseif has('mac')
......
elseif has('unix')
......
endif
特定のマシンをテストするには、hostname
コマンドの出力をテストできます。例えば、
let hostname = substitute(system('hostname'), '\n', '', '')
if hostname == "tigger"
...
elseif hostname == "pooh"
...
endif
使用可能な環境変数の値をテストすることもできます。
if $HOSTNAME == "tigger"
...
elseif $HOSTNAME == "pooh"
...
endif
$DISPLAY
変数も役立ちます。
私のvimrc
にこのスニペットがあります:
let s:Host_vimrc = $HOME . '/.' . hostname() . '.vimrc'
if filereadable(s:Host_vimrc)
execute 'source ' . s:Host_vimrc
endif
存在する場合は、単にsource $HOME/.$HOSTNAME.vimrc
を実行します。 hostname()
と連結を使用しましたが、$HOSTNAME
が常に設定されていることがわかっている場合は、より簡潔なexpand('$HOME/.$HOSTNAME.vimrc')
を使用することもできます。
OS検出に関する以前の回答では、MacVimでOS Xを検出していません(また、ドキュメントで推奨されているようにhas("macunix")
も使用していません)。
これが、WindowsとOS Xを区別するために使用するものです。
_if has("win32")
"Windows options here
else
if has("unix")
let s:uname = system("uname")
if s:uname == "Darwin\n"
"Mac options here
endif
endif
endif
_
has("win32")
は、64ビットWindows上の64ビットVimでも機能しました。
if has("unix")
ブロック内でuname
の同様のテストを使用して、Unixの他のフレーバーを区別することもできます。コマンドラインからuname
または_uname -a
_を実行して、_s:uname with
_を比較する必要があるものを確認します。 unameの出力の一部だけを比較する必要がある場合は、:h matchstr()
も参照してください。
多くのマシンで、すべてのホスト名を.vimrc
退屈になる可能性があります。異なるUNIXフレーバーを区別する方が簡単な場合があります。
" set font when running on Solaris
if (match(system('uname -s'), 'SunOS') >= 0)
set guifont=* " fixes "E665: Cannot start GUI, no valid font found"
endif
各マシンのカスタム.gvimrcにOS固有のものを配置し、それらすべてに共通の.vimrcを使用することができます。 GVimの起動時に両方のファイルが読み込まれ、非GUI Vimの起動時には.vimrcのみが読み込まれます。
LinuxとWindowsの分離について-.vimrc
および_vimrc
、それに応じて。