순수 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 'post 는 그에 대한 좋은 개요를 제공하므로 여기서는 동일한 내용을 반복하지 않겠습니다.has()
:h feature-list
has()
좋은 아이디어 같은 소리 당신은 맥 OS X에 그것을 시도 때까지 기본에 /usr/bin/vim
, has('unix')
이다 사실 이지만 모두 has('macunix')
하고 has('mac')
있는 거짓 일반 MacVim 다운로드에, 세 가지가 있으며, 반면 사실 은 GUI 또는 TUI를 사용하는지 여부.
따라서 최상의 솔루션은 has('winXX')
Windows와 uname
유닉스 계열 시스템 의 혼합입니다 . 출력은 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에서도 마찬가지이므로 실제 유닉스를 에뮬레이트 된 것과 구별하는 데별로 유용하지 않습니다.
환경 변수가 유용 할 것입니다.
감지하려면 또는을 tmux
확인할 수 있습니다 .if !empty($TMUX)
if $TERM == 'screen'
또한 같은 환경 변수의 운영체제 추론 할 $MACHTYPE
( 배시에 의해 설정된다 ) 또는 $PATH
.
TFS와 같은 기능이 설치되어 있는지 감지하려면이 기능을 사용할 수 있습니다 executable()
.
$MACHTYPE
. let machtype=system('echo -n $MACHTYPE')
먼저 같은 것을해야합니다 .
다른 사람들이 이미 지적했듯이 신뢰할만한 탐지는 까다로울 수 있습니다. 내가 언급하고 싶은, 그래서 더 나은, 바퀴를 재발견하지 VIM-기타 라이브러리를 제공하는, 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