純粋な 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用とuname
Unixライクなシステム用の混合です。出力は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
たので、役に立たなかった。
uname
Linux、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