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

Как я могу обнаружить OS X в моем файле .vimrc, поэтому некоторые конфигурации применимы только к OS X?

Я использую свой файл .vimrc на своем ноутбуке (OS X) и нескольких серверах (Solaris и Linux), и мог гипотетически когда-нибудь использовать его в окне Windows. Я знаю, как обнаружить unix вообще и окна, но как определить OS X? (И в этом отношении есть ли способ различать Linux и Solaris и т.д. И есть ли список из всех строк, которые могут иметь значение? My 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.)

4b9b3361

Ответ 1

Вы можете попробовать, что я делаю в моем .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. Ваш пробег может отличаться.

Ответ 2

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

Вот правильный (передан мой 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".

Ответ 3

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

Отметьте :h feature-list полный список условных обозначений, которые вы можете использовать.

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

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

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

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

EDIT: Этот подход и его варианты (has('mac'), has('macunix'), has('gui_mac')) не работают для vim в OS X. Если вы используете только MacVim, вы в безопасности, Если вы такие странные, как я, и мне иногда хочется прыгать в vim, то один из других решений может быть более подходящим.

Ответ 4

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

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

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

Ответ 5

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 отслеживание - это, вероятно, путь. это древняя версия, никогда не использовавшая ее.

Ответ 6

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

if system('uname -s') == "Darwin\n"
  "OSX
  set clipboard=unnamed 
else
  "Linux
  set clipboard=unnamedplus
endif

Ответ 7

gui_macvim gui_gtk2 gui_gtk gui_win32

Существует обнаружение ОС script где-то на stackoverflow - больше ключевых слов, чтобы найти его: win64 win95 macunix...