Могу ли я получить текущую операционную систему (Windows, Linux, OS X, ..), используя чистый Vimscript (без Python или Perl)?
Я хочу включить разные настройки в моем (синхронизированном) .vimrc для разных типов операционных систем, которые я использую.
Ответы:
Лучше всего использовать
has()
эту функцию, чтобы проверить возможности Vim; Особенности ОС от:help feature-list
:И некоторые старые (полу-устаревшие) системы:
Пример:
Альтернативный способ с большей гибкостью - это вызов внешнего
uname
, это также позволяет вам получить номер версии и такой:Обратите внимание, что
uname
отсутствует в большинстве систем Windows.Как правило, лучше использовать функцию обнаружения , а не ОС . Например, используя одну из функций
has()
или проверяя, существует ли какой-либо путь. Пост 200_success ' дает хороший обзор этого, поэтому я не буду повторять здесь тот же контент.источник
:h feature-list
has()
звучит как хорошая идея , пока не попробуешь его на Mac OS X: в по умолчанию/usr/bin/vim
,has('unix')
это верно , но какhas('macunix')
иhas('mac')
являются ложными , тогда как в обычной MacVim загрузки, все три являются верно ли использовать вас графический интерфейс или TUI.Поэтому лучшее решение - это сочетание
has('winXX')
для Windows иuname
Unix-подобных систем. Обратите внимание, что выводuname
заканчивается символом новой строки, поэтому его необходимо очистить перед использованием.Вот код, который я использовал некоторое время, обновлен для
win64
:После этого вы можете использовать
g:os
переменную в любом месте вашегоvimrc
:источник
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 , которая предоставляет
xolox#misc#os#is_mac()
иxolox#misc#os#is_win()
функционирует.источник
Я пытался
has('unix')
, но я не нашел это полезным, так как все мои Linux, Mac и Windows Git Bash вернулисьtrue
за ним.Я нашел
uname
подходящим, поскольку он различает Linux, Mac, Windows, без особой детализации.источник