Как я могу отличить текущую операционную систему в моем .vimrc?

20

Я использую Vim на OS X и Windows, с почти идентичной конфигурацией.

Я хотел бы иметь возможность использовать то же самое .vimrcна двух операционных системах, но есть несколько вещей, которые мне нужно настроить по-разному.

Что я хотел бы добавить в мой .vimrcфайл:

:if <windows>
  "some windows-specific settings here
:elseif <os x>
  "some os x-specific settings here
:endif

Но я не знаю , что использовать для <windows>и <os x>.

Это возможно?

Богатый
источник

Ответы:

30

NB. Хотя оба предыдущих ответа дали мне достаточно информации, чтобы выяснить, как решить проблему (и получил от меня отклики), ни один из них не дал полного ответа. Чтобы другим людям с таким же вопросом не приходилось проводить исследования, я добавляю свой собственный ответ. Однако если @googletorp или @Azz отредактируют свой ответ, добавив эту информацию, я удалю свой ответ и приму их.

Выход к :h feature-listпредполагает , что вы должны быть в состоянии использовать has("win32")и has("macunix"), но последний не работает в версии Vim включен в OS X. (Это делает , однако, работа в MacVim.)

Вот что я в итоге использовал:

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-битном Vim на 64-битной Windows.

Вы также можете использовать аналогичные тесты unameвнутри if has("unix")блока, чтобы отличить другие варианты Unix. Просто запустите unameили uname -aиз командной строки, чтобы увидеть, что вам нужно сравнить s:uname. Смотрите также, :h matchstr()если вам нужно сравнить только часть unameвыходных данных.

Богатый
источник
1
Для записи: в vim из MSYS2 has ("unix") равен 1, has ("win32") равен 0, а has ("win32unix") равен 1. Поэтому используйте has ("win32unix"), чтобы отличить его.
user31389
4

Вы можете посмотреть здесь

В принципе, вы можете использовать либо has(), system():

let os = substitute(system('uname'), "\n", "", "")
if os == "SunOS"
  ..
endif  
googletorp
источник
2

Кажется, это то, что вы ищете, я не совсем понимаю, поэтому я просто свяжу вас.

/programming/2842078/how-do-i-detect-os-x-in-my-vimrc-file-so-certain-configurations-will-only-apply

Azz
источник
Странный. Это, кажется, соскоблено с stackoverflow.com/questions/2842078
Rich
1
@Rich: Все данные SU лицензируются в рамках Creative Commons Attribution ShareAlike, которого они, похоже, придерживаются.
Даниэль Бек
@Daniel: Интересно! Спасибо, что дал мне знать.
Рич