.vimrc에서 VIM 설정을 컴퓨터에 종속시키는 방법은 무엇입니까?


44

여러 컴퓨터간에 VIM 구성 파일을 공유합니다. 그러나 특정 설정을 특정 컴퓨터에 맞게 설정하고 싶습니다.

예를 들어 고해상도 랩톱의 글꼴 크기는 저해상도 데스크탑과 달라야합니다. 그리고 더 중요한 것은 Windows의 gVIM이 더 많은 windowsy로 작동하고 OSV의 MacVim이 더 많은 maccy 및 gVIM이 Linux의 경우보다 항상 작동하는 것처럼 보이기를 원한다는 것입니다. (이것은 이상한 감정 일지 모르지만 OS를 전환 할 때 정신 모드를 전환하는 데 매우 익숙합니다)

.vimrc머신 또는 OS에 따라 몇 가지 설정을 수행 할 수있는 방법이 있습니까?

답변:


44

의 OS 감지 .vimrc:

if has('win32')
    ......
elseif has('mac')
    ......
elseif has('unix')
    ......
endif

4
has('gui_running')tty 모드와 GUI 모드를 구별해야하는 경우 에도 유용 합니다.
Chris Johnsen

10
has () 함수는 Vim 기능이 있는지 테스트합니다. '리눅스'기능은 없습니다. 올바른 주장은 '유닉스'입니다. 또한 OS-X의 올바른 주장은 'macunix'입니다. 'mac'기능도 있지만 has('mac')모든 Mac에 해당 되는지 아니면 OS-X 이전 Mac에 해당 되는지 잘 모르겠습니다 . :help feature-list전체 목록을 참조하십시오 .
garyjohn

1
has('unix'). 내 실수.
캐주얼 코더

매우 늦었지만 대답은 OSX에서 나를 위해 '(mac)'트리거합니다.
Diablo-D3

1
나는 OS X와 ​​함께 제공되는 vim 1) 및 2) Gentoo Prefix (Homebrew와 비슷한 것)를 통해 설치 한 3) MacVim에서 온 vim을 테스트했습니다. MacVim에서 제공된 것만에 대해 true를 올바르게 반환합니다 has("mac"). 내 생각에 그들은 실제로 기능 테스트를 수행하는 패치를 사용했다고 생각합니다. has("mac")테스트에 의존하는 경우 테스트를 수행하여 vim에서 지원되는지 확인하십시오.
yegle

26

특정 머신을 테스트하기 위해 hostname명령 의 출력을 테스트 할 수 있습니다 . 예를 들어

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

사용 가능한 환경 변수의 값을 테스트 할 수도 있습니다.

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

$DISPLAY변수도 유용 할 수 있습니다.


13
hostname ()이이를 수행합니다 (예 : 시스템 이름을 호출하지 않고 hostname () == 'tigger'...).
tvon April

의 결과 system('hostname')machine.mycompany.com\n였으므로 대체 명령을로 변경해야했습니다 substitute(system('hostname'), '\.\_.*$', '', '').
JPaget

9

내 스 니펫이 있습니다 vimrc.

let s:host_vimrc = $HOME . '/.' . hostname() . '.vimrc'                                                                                                                               
if filereadable(s:host_vimrc)                                                                                                                                                        
  execute 'source ' . s:host_vimrc                                                                                                                                                   
endif

source $HOME/.$HOSTNAME.vimrc존재 하는 경우 단순히 실행 됩니다. 나는 사용 hostname()하고 연결했습니다 . 항상 설정되어 expand('$HOME/.$HOSTNAME.vimrc')있다면 더 간결하게 사용할 수도 있습니다 $HOSTNAME.


7

OS 감지에 대한 이전 답변은 MacVim에서 OS X를 감지하지 못합니다 (그리고 has("macunix")설명서에서 권장하는대로 사용하지 마십시오 ).

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")64도 64 비트 빔에, 나를 위해 일한 Windows를 비트.

블록 uname내에서 비슷한 테스트를 사용 if has("unix")하여 다른 유닉스 풍미를 구별 할 수도 있습니다 . 명령 줄에서 실행 uname하거나 uname -a비교할 내용을 확인하십시오 s:uname with. :h matchstr()uname 출력의 일부만 비교해야하는 경우 도 참조하십시오 .


2

많은 기계를 사용하면 모든 호스트 이름을 나열하는 .vimrc것이 지루해질 수 있으므로 다른 유닉스 풍미를 쉽게 구별 할 수 있습니다.

" 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

불행히도 이것은 Windows 시스템에서 작동하지 않습니다.
oligofren

1

OS 별 항목을 각 시스템의 사용자 지정 .gvimrc에 넣고 공통 .vimrc를 모두 사용할 수 있습니다. GVim이 시작될 때 두 파일 모두 읽히고 GUI 이외의 Vim이 시작될 때 .vimrc 만 읽습니다.


1

리눅스와 윈도우 사이의 분리에 대해서 - 당신은 단순히 서로 다른 설정을 넣을 수 있습니다 .vimrc_vimrc따라서.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.