Как я могу обнаружить 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.)
Ответы
Ответ 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...