VIM ayarları bilgisayar nasıl .vimrc bağımlı yapmak nasıl?


44

VIM yapılandırma dosyamı birkaç bilgisayar arasında paylaşıyorum. Ancak, bazı ayarların belirli bilgisayarlara özgü olmasını istiyorum.

Örneğin, yüksek çözünürlüklü dizüstü bilgisayardaki yazı tipi boyutları düşük çözünürlüklü masaüstünden farklı olmalıdır. Daha da önemlisi, Windows’taki gVIM’in daha fazla vitrinli olmasını ve OSX’deki MacVim’in her zamanki gibi davranması için Linux’ta daha fazla maccy ve gVIM’i kullanmasını istiyorum. (Bu garip bir duygu olabilir, ancak işletim sistemlerini değiştirirken zihinsel kipleri değiştirmeye çok alışkınım)

.vimrcMakineye veya işletim sistemine bağlı olarak birkaç ayar yapmanın bir yolu var mı ?

Yanıtlar:


44

İşletim sistemi tespiti .vimrc:

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

4
Ayrıca faydalıdır: has('gui_running')tty modu ile GUI modu arasında ayrım yapmanız gerekirse.
Chris Johnsen,

10
Has () işlevi Vim özelliklerinin varlığını test eder. 'Linux' özelliği yoktur. Uygun argüman 'unix'. Ayrıca, OS-X için doğru argüman 'macunix'. Bir 'mac' özelliği de var, ancak has('mac')tüm Mac'ler için mi yoksa sadece OS öncesi X Mac'ler için doğru olup olmadığını bilmiyorum . Tüm :help feature-listliste için bakınız .
garyjohn

1
Evet has('unix'). Benim hatam.
Casual Coder

Çok geç bir cevap, ancak evet, ('mac') benim için OSX’de tetikler.
Diablo-D3,

1
OS X ile gelen vim 1) ve Gentoo Öneki (Homebrew'e benzer bir şey) yüklediğim v3'i ve MacVim'den gelen 3'ü test ettim. Sadece MacVim'den gelenler doğru için doğru olarak dönecektir has("mac"). Tahminime göre, özellik testini gerçekten yapan bazı yamalar kullandılar. has("mac")Teste güveniyorsanız, testinizde desteklendiğinden emin olmak için biraz test yapın.
yeğen

26

Belirli bir makineyi test etmek için hostnamekomutun çıktısını test edebilirsiniz . Örneğin,

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

Mevcut ortam değişkenlerinin değerini de test edebilirsiniz:

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

$DISPLAYDeğişkeni de yararlı olabilir.


13
hostname () bunu yapar, örneğin: eğer hostname () == 'tigger' ..., sistem çağrısı yapmak zorunda kalmadan.
tvon

Bunun sonucu system('hostname')olarak machine.mycompany.com\nsubstitute komutunu değiştirmek zorunda kaldım substitute(system('hostname'), '\.\_.*$', '', '').
JPaget

9

İçimde şu pasajı var vimrc:

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

Bu sadece source $HOME/.$HOSTNAME.vimrcvarsa, çalıştırır . Ben kullandım hostname()ve birleştirme, her zaman ayarlanmış expand('$HOME/.$HOSTNAME.vimrc')olduğunu biliyorsanız , daha özlü de kullanabilirsiniz $HOSTNAME.


7

İşletim sistemi algılamasıyla ilgili önceki yanıt MacVim'deki OS X'i benim için algılamıyor (ve has("macunix")belgelerde dediği gibi kullanılmıyor ).

İşte Windows ve OS X arasında ayrım yapmak için kullandığım şey:

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")Benim için çalıştığını, 64 bit Windows'ta 64 bit Vim'de bile çalıştığını unutmayın .

Unix'in diğer lezzetlerini ayırt etmek unameiçin if has("unix")blok içindeki benzer testleri de kullanabilirsiniz . Sadece çalıştırmak unameveya uname -akomut satırından karşılaştırmak için gerekenleri görmek için s:uname with. Ayrıca :h matchstr(), uname çıktısının yalnızca bir kısmını karşılaştırmanız gerekip gerekmediğine de bakın .


2

Birçok makineyle, tüm ana bilgisayar adlarını listelemek .vimrcsıkıcı hale gelebilir, farklı unix lezzetlerini ayırt etmek daha kolay olabilir:

" 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

Ne yazık ki, bu Windows makinelerinde kırılıyor.
oligofren

1

İşletim sistemine özgü öğeleri yalnızca her makine için özel bir .gvimrc içine yerleştirebilir ve hepsinde ortak bir .vimrc kullanabilirsiniz. Her iki dosya da GVim başladığında okunur, gui Vim başladığında yalnızca .vimrc okunur.


1

Linux ve Windows arasındaki ayrılıkla ilgili olarak - .vimrcve _vimrcbuna göre farklı ayarları kolayca yapabilirsiniz .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.