VIM सेटिंग्स को कंप्यूटर पर निर्भर करने के लिए .vimrc कैसे बनाएं?


44

मैं कई कंप्यूटरों के बीच अपनी VIM कॉन्फ़िगरेशन फ़ाइल साझा करता हूं। हालाँकि, मैं चाहता हूं कि कुछ सेटिंग्स कुछ कंप्यूटरों के लिए विशिष्ट हों।

उदाहरण के लिए, उच्च-रिज़ॉल्यूशन लैपटॉप पर फ़ॉन्ट आकार कम-रेज डेस्कटॉप के लिए अलग होना चाहिए। और अधिक महत्वपूर्ण बात, मैं चाहता हूं कि विंडोज़ पर जीवीआईएम अधिक विंडोज़ और मैकविम का व्यवहार करने के लिए ओएसएक्स पर अधिक बर्फीले और जीवीआईएम पर व्यवहार करे, जैसा कि वह हमेशा करता है। (यह एक अजीब भावना हो सकती है, लेकिन मैं ओएस को स्विच करते समय मानसिक मोड को स्विच करने के लिए उपयोग किया जाता हूं)

क्या .vimrcमशीन में कुछ सेटिंग्स करने का एक तरीका है- या OS- निर्भर?

जवाबों:


44

में ओएस का पता लगाने .vimrc:

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

4
इसके अलावा उपयोगी: has('gui_running')अगर आपको tty मोड और GUI मोड के बीच अंतर करने की आवश्यकता है।
क्रिस जॉन्सन

10
है () फ़ंक्शन विम विशेषताओं की उपस्थिति का परीक्षण करता है। कोई 'लिनक्स' सुविधा नहीं है। उचित तर्क 'यूनिक्स' है। साथ ही, OS-X के लिए उचित तर्क 'macunix' है। एक 'मैक' सुविधा भी है, लेकिन मुझे नहीं पता कि has('mac')सभी मैक के लिए सच है या सिर्फ पूर्व-ओएस-एक्स मैक। :help feature-listपूरी सूची देखें
गैरीजोन

1
हाँ, has('unix')। मेरी गलती।
आकस्मिक कॉडर

एक बहुत देर से जवाब, लेकिन हाँ, ('मैक') OSX में मेरे लिए ट्रिगर करता है।
डियाब्लो-डी 3

1
मैंने vim 1 का परीक्षण किया है) जो OS X के साथ आता है, और 2) जिसे मैंने Gentoo Prefix (Homebrew के समान कुछ), और 3) के माध्यम से स्थापित किया है जो MacVim से आता है। मैकविम से केवल एक ही सही तरीके से वापस आ जाएगा has("mac")। मेरा अनुमान है कि उन्होंने कुछ पैच का इस्तेमाल किया है जो वास्तव में फीचर टेस्ट का काम करते हैं। यदि आप has("mac")परीक्षण पर भरोसा करते हैं , तो यह सुनिश्चित करने के लिए कुछ परीक्षण करें कि यह आपके विम पर समर्थित है।
यिंग

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' ..., बिना सिस्टम कॉल किए।
टीवीन

के लिए परिणाम system('hostname')था machine.mycompany.com\n, इसलिए मुझे स्थानापन्न आदेश को बदलना पड़ा substitute(system('hostname'), '\.\_.*$', '', '')
जेपीगेट

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")प्रलेखन के रूप में इसका उपयोग करना चाहिए)।

यहाँ मैं विंडोज और ओएस एक्स के बीच भेद करने के लिए क्या उपयोग कर रहा हूं:

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 बिट विम में भी, मेरे लिए काम किया।

आप यूनिक्स के अन्य स्वादों को अलग करने के unameलिए if has("unix")ब्लॉक के भीतर भी इसी तरह के परीक्षणों का उपयोग कर सकते हैं । बस चलाने unameया uname -aकमांड-लाइन से यह देखने के लिए कि आपको क्या तुलना करने की आवश्यकता है s:uname with। यह भी देखें :h matchstr()कि क्या आपको केवल अनाम आउटपुट के एक भाग की तुलना करने की आवश्यकता है।


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

दुर्भाग्य से, यह विंडोज़ मशीनों पर टूट जाता है।
ऑलिगॉफ्रेन

1

आप बस प्रत्येक मशीन के लिए एक कस्टम .gvimrc में OS- विशिष्ट सामान रख सकते हैं, और उन सभी पर एक सामान्य .vimrc का उपयोग कर सकते हैं। जब GVim शुरू होता है तो दोनों फाइलें पढ़ी जाती हैं, केवल .vimrc तब पढ़ी जाती हैं जब गैर-गिनी विम शुरू होती है।


1

लिनक्स और विंडोज के बीच अलगाव के बारे में - तो आप बस में अलग-अलग सेटिंग रख सकते हैं .vimrcऔर _vimrc, तदनुसार।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.