Как установить настройки VIM, машинно-зависимые в .vimrc?

Я совместно использую свой конфигурационный файл VIM между несколькими компьютерами. Однако я хочу, чтобы некоторые настройки были специфичны для определенных компьютеров.

Например, размеры шрифта на ноутбуке высокого разрешения должны отличаться от низкого-res рабочего стола. И что еще более важно, я хочу, чтобы gVIM в Windows вел себя больше windowsy и MacVim на OSX для поведения, больше maccy и gVIM на Linux, чтобы просто вести себя как он всегда делают. (Который мог бы быть странным чувством, но я очень используюсь для переключения умственных режимов при переключении Ose),

Есть ли способ установить несколько настроек в .vimrc машина - или зависимый от операционной системы?

44
задан 01.10.2010, 12:46

5 ответов

Обнаружение ОС в .vimrc:

if has('win32')
    ......
elseif has('mac')
    ......
elseif has('unix')
    ......
endif
44
ответ дан 07.12.2019, 08:38

Для тестирования на конкретную машину можно протестировать вывод hostname команда. Например,

let hostname = substitute(system('hostname'), '\n', '', '')
if hostname == "tigger"
   ...
elseif hostname == "pooh"
   ...
endif

Вы могли также протестировать значение доступных переменных среды:

if $HOSTNAME == "tigger"
   ...
elseif $HOSTNAME == "pooh"
   ...
endif

$DISPLAY переменная может также быть полезной.

26
ответ дан 07.12.2019, 08:38

Вы могли просто поместить определенный для ОС материал в пользовательский .gvimrc для каждой машины и использовать общий .vimrc на всех них. Оба файла читаются, когда GVim запускается, только .vimrc читается, когда non-gui Vim запускается.

1
ответ дан 07.12.2019, 08:38

Предыдущий ответ об обнаружении ОС не обнаруживает OS X в MacVim для меня (и ни один не делает использование has("macunix") поскольку документация предлагает, чтобы она была должна).

Вот то, что я использую для distiguish между Windows и OS X:

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") работавший для меня, даже в Vim на 64 бита в Windows на 64 бита.

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

7
ответ дан 07.12.2019, 08:38

С большим количеством машин, перечисляя все имена хостов в .vimrc может стать утомительным, могло бы быть легче различать различные разновидности Unix:

" set font when running on Solaris
if (match(system('uname -s'), 'SunOS') >= 0)  
   set guifont=*   " fixes "E665: Cannot start GUI, no valid font found"
endif
2
ответ дан 07.12.2019, 08:38

Теги

Похожие вопросы