2010-05-15 2 views
46

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

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

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 

Но ясно, что «макинтош» не является правильной строка, ни какого-либо из других, я попробовал.


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

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

+0

'has (" macunix ")' отлично работает с версией VIM, установленной Homebrew, в настоящее время 7.4.1-936. YMMV. –

ответ

9

Вы хотите macunix. Цитирую :h feature-list:

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

макинтош, AFAIK, относится только к старой школы Маков, где \ г есть разделитель строки.

+2

Спасибо, похоже, что он должен работать, но по какой-то причине это не так. Если я поставлю свою команду «mate» вне if-блока, она будет работать. Но если я поставлю его после «если есть (« macunix »), то он терпит неудачу. Есть идеи? – iconoclast

+0

Я предполагаю, что 'mac' относится к Mac OS старой школы (до OS X, основанной на Unix). –

+0

Теперь у vim есть «osx» featuer. Смотрите: https://github.com/vim/vim/blob/2cab0e191055a8145ccd46cd52869fbb9798b971/src/evalfunc.c#L5456 – Charles

46

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

+11

Возможно, другие люди не работают с этой проблемой, но мне пришлось изменить указанную выше строку на 'if s: uname == "Darwin \ n" ' –

+2

@JasonAxelson Вы можете удалить замену' \ n': 'let s: uname = substitute (system (" uname "), '\ n', '', '')' – aymericbeaumet

+0

@rossipedia Как вам кажется, вы хотели быть переносимым путем тестирования 'has (" unix ")', вы должны использовать 'uname -s' вместо' uname'. – aymericbeaumet

21

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

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

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

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

13

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

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

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

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

При этом, вы можете обнаружить для Gvim, VI, Vim, и любые другие ароматы вы могли бы использовать. Приятно то, что вы могли бы иметь VIM-совместимые установки на OS X.

Reference from Vim Mailing list

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

+0

сторона примечание: мой поиск google-fu был 'vim detect macvim': P –

+0

в порядке, это выглядит очень полезно, но есть ли у меня доступ к TextMate полностью зависит от ОС, а не на том, является ли это версией графического интерфейса пользователя или обычной версией vim. Поэтому для моих целей я не уверен, что это мне очень поможет. У меня есть команда открыть файл в TextMate, который применяется только в том случае, если я нахожусь в OS X, и я могу добавить похожие команды, чтобы открыть текущий файл в Sublime Text, если я нахожусь в Windows или Linux. И я почти никогда не использую GUI-версию vim, просто vim в терминале. (Я нахожу MacVim дезориентирующим: он не ведет себя как настоящее приложение Cocoa, и это тоже не приложение для терминала.) – iconoclast

+0

Ах, я не знал, что TextMate может использовать файлы vimrc –

-2

gui_macvim gui_gtk2 gui_gtk gui_win32

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

8

доморощенного vim и MacVim возвращает истину для 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 

с другой стороны, как Эль Капитана, система vim возвращает ложь для has('mac') и uname слежка, вероятно, путь. это древняя версия, никогда не использовавшая ее.

+1

Я еще не тестировал, но это, кажется, лучшее решение ... – iconoclast

+1

Я тестировал , и это лучшее решение. Я думаю, у него так мало оборотов, потому что это годы, но это гораздо более простое и одинаково эффективное решение. – Mikkel

+0

Работает на Mac с Vim 8 от Brew. –

2

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

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