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


44

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

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

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

回答:


44

OSの検出.vimrc

if has('win32')
    ......
elseif has('mac')
    ......
elseif has('unix')
    ......
endif

4
またhas('gui_running')、ttyモードとGUIモードを区別する必要がある場合にも役立ちます。
クリスジョンセン

10
has()関数は、Vim機能の存在をテストします。「Linux」機能はありません。適切な引数は「unix」です。また、OS-Xの適切な引数は 'macunix'です。「mac」機能もありhas('mac')ますが、すべてのMacに当てはまるのか、OS-X以前のMacに当てはまるのかはわかりません。:help feature-list完全なリストを参照してください。
ゲイリージョン

1
はい、has('unix')。私の間違い。
カジュアルコーダー

非常に遅い答えですが、はい、OSXでhas( 'mac')トリガーを使用します。
ディアブロD3

1
vim 1)OS Xに付属しているもの、2)Gentoo Prefix(Homebrewに似たもの)を介してインストールしたもの、3)MacVimからのものをテストしました。MacVimから来るものだけが、に対して正しくtrueを返しますhas("mac")。私は、彼らが実際に機能テストを機能させるパッチを使用したと推測しています。has("mac")テストに依存している場合は、vimでサポートされていることを確認するためにテストを行います。
yegle

26

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

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

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

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

$DISPLAY変数にも役立ちます。


13
hostname()はこれを行います。例:if hostname()== 'tigger' ...、システムコールを行う必要なし。
-tvon

の結果はそうsystem('hostname')だったmachine.mycompany.com\nので、代わりのコマンドをに変更する必要がありましたsubstitute(system('hostname'), '\.\_.*$', '', '')
JPaget

9

私は私のスニペットを持っていますvimrc

let s:host_vimrc = $HOME . '/.' . hostname() . '.vimrc'                                                                                                                               
if filereadable(s:host_vimrc)                                                                                                                                                        
  execute 'source ' . s:host_vimrc                                                                                                                                                   
endif

これはsource $HOME/.$HOSTNAME.vimrc、存在する場合に単に実行されます。使用hostname()して連結しましexpand('$HOME/.$HOSTNAME.vimrc')$HOSTNAMEが、常に設定されていることがわかっている場合は、より簡潔に使用することもできます。


7

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でも、私にとってはうまくいったことに注意してください。

ブロックuname内で同様のテストを使用して、if has("unix")他のUnixのフレーバーを区別することもできます。を実行するunameuname -a、コマンドラインから実行して、比較する必要があるものを確認しますs:uname with:h matchstr()unameの出力の一部だけを比較する必要がある場合も参照してください。


2

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

残念ながら、これはWindowsマシンでは機能しません。
オリゴフレン

1

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


1

LinuxとWindowsの間の分離について-あなたは、単純に異なる設定を置くことができます.vimrcし、_vimrcそれに応じて、。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.