web-dev-qa-db-ja.com

VIM設定を.vimrcでコンピューター依存にする方法?

VIM構成ファイルを複数のコンピューター間で共有していますが、一部の設定を特定のコンピューターに固有にする必要があります。

たとえば、高解像度のラップトップのフォントサイズは、低解像度のデスクトップとは異なる必要があります。さらに重要なことに、WindowsでのgVIMはよりウィンドウのように動作し、OSXでのMacVimはより多くのmaccyで動作し、LinuxのgVIMは通常どおりに動作することを望みます。 (それは奇妙な感情かもしれませんが、私はOSを切り替えるときにメンタルモードを切り替えるのに非常に慣れています)

.vimrcマシン依存またはOS依存でいくつかの設定を行う方法はありますか?

44
bastibe

.vimrcでのOS検出:

if has('win32')
    ......
elseif has('mac')
    ......
elseif has('unix')
    ......
endif
44
Casual Coder

特定のマシンをテストするには、hostnameコマンドの出力をテストできます。例えば、

let hostname = substitute(system('hostname'), '\n', '', '')
if hostname == "tigger"
   ...
elseif hostname == "pooh"
   ...
endif

使用可能な環境変数の値をテストすることもできます。

if $HOSTNAME == "tigger"
   ...
elseif $HOSTNAME == "pooh"
   ...
endif

$DISPLAY変数も役立ちます。

26
garyjohn

私の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')を使用することもできます。

9
unthought

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()も参照してください。

7
Rich

多くのマシンで、すべてのホスト名を.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
2
philant

各マシンのカスタム.gvimrcにOS固有のものを配置し、それらすべてに共通の.vimrcを使用することができます。 GVimの起動時に両方のファイルが読み込まれ、非GUI Vimの起動時には.vimrcのみが読み込まれます。

1
Neil

LinuxとWindowsの分離について-.vimrcおよび_vimrc、それに応じて。

1
bjauy