純粋な Vimscript(PythonまたはPerlなし)を使用して、現在のオペレーティングシステム(Windows、Linux、OS X、..)を取得できますか?
使用しているオペレーティングシステムの種類ごとに、(同期された).vimrcで異なる設定を有効にしたい。
純粋な Vimscript(PythonまたはPerlなし)を使用して、現在のオペレーティングシステム(Windows、Linux、OS X、..)を取得できますか?
使用しているオペレーティングシステムの種類ごとに、(同期された).vimrcで異なる設定を有効にしたい。
回答:
最適な方法は、を使用has()することです。この関数では、Vimの機能を確認できます。OS固有の機能
 :help feature-list:
macunix                 Macintosh version of Vim, using Unix files (OS-X).
unix                    Unix version of Vim.
win32                   Win32 version of Vim (MS-Windows 95 and later, 32 or
                        64 bits)
win32unix               Win32 version of Vim, using Unix files (Cygwin)
そして、いくつかの古い(準推奨されていない)システム:
amiga                   Amiga version of Vim.
os2                     OS/2 version of Vim.
win16                   Win16 version of Vim (MS-Windows 3.1).
win64                   Win64 version of Vim (MS-Windows 64 bit).
win95                   Win32 version for MS-Windows 95/98/ME.
例:
if has('win32')
    echo "Someone please open the Window(s)!"
endif
より柔軟な別の方法は、externalを呼び出すunameことです。これにより、バージョン番号なども取得できます。
let uname = system('uname -a')
unameほとんどのWindowsシステムには存在しないことに注意してください。
一般に、OS検出ではなく機能検出を使用するのが最善です。たとえば、いずれかの機能を使用するか、何らかのパスが存在するかどうかを確認します。200_successの投稿でその概要を説明しているので、ここでは同じ内容を繰り返しません。has()
:h feature-list
                    has()良いアイデアのような音は、Mac OS X上でそれを試してみてくださいまで:デフォルトでは/usr/bin/vim、has('unix')ある真実が、両方has('macunix')とhas('mac')されている偽の中には、定期的なMacVimのダウンロードには、すべての3つがあり、真のあなたはGUIやTUIを使用するかどうか。
そのため、最良のソリューションは、has('winXX')Windows用とunameUnixライクなシステム用の混合です。出力はuname改行で終わるため、使用する前にクリーンアップする必要があります。
ここに私がしばらく使用してきたコードがありますwin64:
if !exists("g:os")
    if has("win64") || has("win32") || has("win16")
        let g:os = "Windows"
    else
        let g:os = substitute(system('uname'), '\n', '', '')
    endif
endif
その後、次のg:os場所で変数を使用できますvimrc。
if has("gui_running")
    if g:os == "Darwin"
        set guifont=Fira\ Mono:h12
    elseif g:os == "Linux"
        set guifont=Fira\ Mono\ 10
    elseif g:os == "Windows"
        set guifont=Fira_Mono:h12:cANSI
    endif
endif
has('unix')正確です。has('macunix')しかし、それが間違っているのは奇妙です。これはほとんどバグのように聞こえますか?
                    has('macunix')依存するように思われるMACOS_X_UNIX場合はセットである、unameあるDarwinにconfigure...スクリプト
                    has ("win32")64ビットVimでも動作するようです。
                    has('unix')は、Windows Git Bashにも当てはまるため、実際のUNIXとエミュレートされたものを区別するのにはあまり役立ちません。
                    環境変数が役立ちます。
検出するにはtmux、if !empty($TMUX)またはを確認できますif $TERM == 'screen'。
また、$MACHTYPE(Bashによって設定される)や$PATH。などの環境変数からオペレーティングシステムを推測することもできます。
TFSなどの機能がインストールされているかどうかを検出するには、このexecutable()機能を使用できます。
$MACHTYPE。let machtype=system('echo -n $MACHTYPE')最初に何かをする必要があります。
                    他の人がすでに指摘しているように、信頼できる検出には注意が必要です。車輪を再発明しない方が良いので、vim-misc libraryに言及して、それが提供xolox#misc#os#is_mac()しxolox#misc#os#is_win()機能します。
試しましたhas('unix')が、Linux、Mac、およびWindows Git Bashがすべて戻ってきtrueたので、役に立たなかった。
unameLinux、Mac、Windowsを細かく区別することなく区別できるため、適切であることがわかりました。
let uname = substitute(system('uname'), '\n', '', '')
" Example values: Linux, Darwin, MINGW64_NT-10.0, MINGW32_NT-6.1
if uname == 'Linux' || uname == 'Darwin'
    " do linux/mac command
else " windows
    " do windows command
endif