Как я могу обнаружить OS X в моем файле .vimrc, чтобы определенные конфигурации были применимы только к OS X? - PullRequest
49 голосов
/ 16 мая 2010

Я использую мой файл .vimrc на своем ноутбуке (OS X) и на нескольких серверах (Solaris & Linux) и, возможно, когда-нибудь смогу использовать его на Windows-коробке. Я знаю, как обнаружить Unix в целом и Windows, но как я могу обнаружить OS X? (И в этом отношении, есть ли способ отличить Linux от Solaris и т. Д. И есть ли где-нибудь список всех строк, которые может иметь «has»?) Мой Google-fu ничего не дал. )

Например, я бы использовал что-то вроде этого:

if has("mac")
  " open a file in TextMate from vi: "
  nmap mate :w<CR>:!mate %<CR>
elseif has("unix")
  " do stuff under linux and "
elseif has("win32")
  " do stuff under windows "
endif

Но ясно, что "mac" - не та строка, как и другие, которые я пробовал.


UPDATE: Ответ ниже («macunix») выглядит довольно ясно, как будто должен работать, но по некоторым причинам это не так. (Возможно, Apple не скомпилировала vim должным образом, чтобы ответить на это? Кажется маловероятным.)

Во всяком случае, мне кажется, мне нужно сместить фокус вопроса: есть ли у кого-нибудь решение, которое достигнет тех же целей? (То есть, успешно обнаруживается, что файл .vimrc используется в Mac OS X.)

Ответы [ 7 ]

49 голосов
/ 16 мая 2010

Моя обновленная .vimrc теперь использует следующее:

if has("gui_running")
  " Gvim
  if has("gui_gtk2") || has("gui_gtk3")
    " Linux GUI
  elseif has("gui_win32")
    " Win32/64 GVim
  elseif has("gui_macvim")
    " MacVim
  else
    echo "Unknown GUI system!!!!"
  endif
else
  " Terminal vim
endif

Мой оригинальный ответ ниже


Вы можете попробовать то, что я делаю в моем .vimrc:

if has("unix")
  let s:uname = system("uname -s")
  if s:uname == "Darwin"
    " Do Mac stuff here
  endif
endif

Хотя, чтобы быть полностью прозрачным, мой фактический .vimrc читает:

let s:uname = system("echo -n \"$(uname)\"")
if !v:shell_error && s:uname == "Linux"

В основном для обнаружения Linux (в отличие от OSX)

Я не уверен, что вам обязательно нужно делать такие вещи echo -n \"$(uname)\", но это было связано с переводом строки в конце вызова uname. Ваш пробег может отличаться.

23 голосов
/ 23 февраля 2011

Я не мог отредактировать предыдущий ответ, добавив только два символа:

Вот правильный (переданный на моем macos 10.6 и версии консоли vim по умолчанию)

if has("unix")
  let s:uname = system("uname")
  if s:uname == "Darwin\n"
    " Do Mac stuff here
  endif
endif

Система («uname») выдаст возвращаемый символ, который становится вторым, если условие не выполнено Просто небольшое исправление, чтобы добавить "\ n".

14 голосов
/ 09 февраля 2012

Я делаю то же, что и вы. Не пытайтесь обнаружить ОС. Вместо этого попытайтесь определить тип vi / vim.

Проверьте :h feature-list для получения полного списка условий, которые вы можете использовать.

Вот что я использую для обнаружения MacVim в моем vimrc:

if has("gui_macvim")
  set guifont=Monaco:h13
endif

С этим вы можете обнаружить gvim, vi, vim и любые другие варианты, которые вы можете использовать. Приятно, что у вас могут быть vim-совместимые настройки в OS X.

Ссылка из списка рассылки Vim

РЕДАКТИРОВАТЬ: Этот подход и его варианты (has('mac'), has('macunix'), has('gui_mac')) не работают для vim в OS X. Если вы используете только MacVim, вы в безопасности. Если вы такой странный, как я, и иногда любите прыгать в vim, возможно, подойдет одно из других решений.

13 голосов
/ 25 января 2016

homebrew vim и MacVim возвращает true для has('mac'), однако так же has('unix'). поэтому, чтобы он работал на всех платформах Unix, возможное решение:

if has('unix')
  if has('mac')       " osx
    set guifont=...
  else                " linux, bsd, etc
    set guifont=...
  endif
elseif has('win32') || has('win64')
  set guifont=...
endif

с другой стороны, для el capitan система vim возвращает false для has('mac'), и uname snooping, вероятно, является подходящим вариантом. это древняя версия, никогда не использовал ее.

9 голосов
/ 16 мая 2010

Вы хотите macunix. Цитировать :h feature-list:

mac     Macintosh version of Vim.
macunix Macintosh version of Vim, using Unix files (OS-X).

mac, AFAIK, применяется только к компьютерам старой школы, где \ r - разделитель строк.

5 голосов
/ 04 сентября 2016

Это самый простой способ, который я нашел.

if system('uname -s') == "Darwin\n"
  "OSX
  set clipboard=unnamed 
else
  "Linux
  set clipboard=unnamedplus
endif
0 голосов
/ 09 мая 2012

gui_macvim gui_gtk2 gui_gtk gui_win32

Где-то в стеке находится поток обнаружения ОС - для его поиска есть больше ключевых слов: win64 win95 macunix ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...