2012-06-24 17 views
12

जब विम शुरू कर दिया है, यह ऑपरेटिंग सिस्टम से वातावरण चर के कई पकड़ लेता है (जैसे PATH) और यह भी यह स्वयं के वातावरण चर (MYVIMRC की तरह) तय करता है।विम में सभी पर्यावरण चर कैसे सूचीबद्ध करें?

मैं सूची कैसे देख सकता हूं या विम के अंदर से उनके संबंधित मूल्यों को समझने वाले सभी पर्यावरण चर देख सकते हैं?

+1

http://vim.wikia.com/wiki/Displaying_the_current_Vim_environment तो मदद – epsilonhalbe

+0

का हो सकता है आप env vars vim विरासत की पूरी सूची की तलाश में हैं, या आप सभी env vars के लिए देख रहे हैं Vim अपने आप (स्वयं द्वारा) बनाता है? –

+2

जहां तक ​​मुझे पता है, विम-केवल माध्यमों से ऐसा करना संभव नहीं है। हालांकि, यूनिक्स जैसी प्रणालियों में से कोई भी ':! Env' का उपयोग कर सकता है। –

उत्तर

18

Vim स्क्रिप्ट में, वर्तमान में परिभाषित वातावरण चर की सूची प्राप्त करने का कोई तैयार किया गया तरीका है। हालांकि, वीम कमांड लाइन पूर्णता सुविधा का फायदा उठाना संभव है।

निम्नलिखित अधूरा आदेश के लिए संभव पूर्ण करने पर विचार करें।

:echo $ 

यह Vim स्क्रिप्ट वाक्य रचना के अनुसार, कि देखने के लिए मुश्किल नहीं है, पूर्तियों की सभी वातावरण चर के नाम हैं। दबाने wildchar कुंजी (टैब, डिफ़ॉल्ट रूप से) या Ctrl +डी उन सभी को प्रदर्शित करेगा।

आदेश एक स्क्रिप्ट के भीतर से प्राप्तियों की इस सूची प्राप्त करने के लिए, हम अपने इंटरैक्टिव प्रकृति पर काबू पाने की जरूरत है। एक संभावित चाल जिसे हम यहां करने के लिए मानते हैं, जो सुविधाओं के संयोजन पर निर्भर करता है। उनमें से सबसे पहले Ctrl +एक आदेश है। कमांड लाइन मोड में यह शॉर्टकट कर्सर के सामने प्रत्येक उपलब्ध समापन को सम्मिलित करता है। ये समापन वर्णमाला क्रम में सूचीबद्ध हैं और रिक्त स्थान से अलग हैं।

अगर हम विम उन प्राप्तियों सही कमांड लाइन में डाला प्रिंट बनाने के लिए, हम उन्हें आसानी से :redir कमांड के साथ आदेश उत्पादन पुनः निर्देशित द्वारा चुरा सकता है। लेकिन सब हम उस पक्ष प्रभाव प्राप्त करने की आवश्यकता पाठ Ctrl +एक साथ डाला उद्धृत करने के लिए है: का हवाला देते हुए हमारे :echo आदेश एक स्ट्रिंग शाब्दिक कि सिर्फ बाहर प्रिंट किया जाएगा के बाकी बनाता है!

:echo 'NAME1 NAME2 NAME3' 
NAME1 NAME2 NAME3 

एक कमांड लाइन इस तरह से संपादित करने के लिए, यदि कोई उपयोगकर्ता :ec (:echo के लिए उपनाम) टाइप कर सकते हैं तो $, प्रेस Ctrl +एक, प्रकार ', आदेश की शुरुआत के लिए कूद साथ Ctrl +बी, दबाने (दाएँ तीर कुंजी) दो बार से डॉलर चिह्न पर कर्सर ले जाते हैं, किहटाना और इसके बजाय ' डालें। कुंजी प्रेस के समान अनुक्रम को :normal कमांड का उपयोग करके गैर-इंटरैक्टिव रूप से पुन: उत्पन्न किया जा सकता है।

पहेली के इन सभी टुकड़ों को एक साथ रखकर, हम निम्नलिखित कार्य प्राप्त करते हैं।

function! Env() 
    redir => s 
    sil! exe "norm!:ec$\<c-a>'\<c-b>\<right>\<right>\<del>'\<cr>" 
    redir END 
    return split(s) 
endfunction 

काम करने के लिए इस दृष्टिकोण के लिए, विम +cmdline_compl सुविधा के साथ संकलित किया जाना चाहिए।

+0

'echo' को' वापसी 'में बदलना बेहतर है: यह मेरे लिए काम करता है:' निष्पादित करें "fu! टेस्ट() \ nexe'silent सामान्य!: $ $ '') वापस लौटें \ \ \ \ विभाजन (''। \ "\\ n \" \ nendfu "'। – ZyX

13

सभी वातावरण चर को सूचीबद्ध करने के, तो

:echo $<C-D> 

उपयोग करते हैं, आप ब्याज की चर का नाम लिखना प्रारंभ कर सकते हैं, स्वत: पूर्ण टैब साथ, अंत में दर्ज अपने मूल्य को दिखाने के लिए दबाएँ।

आप इस सहभागी या स्क्रिप्ट में की जरूरत है कि क्या नहीं बताया। उत्तरार्द्ध के लिए, दुर्भाग्यवश :redir के माध्यम से आउटपुट कैप्चर करना संभव नहीं है।

+0

कार्गत में प्रवेश: धन्यवाद। इंटरेक्टिव मेरे साथ ठीक है। –

+0

'redir' का उपयोग करके कमांड लाइन पूर्णता को कैप्चर करना संभव है। हालांकि, यह एक गैर-तुच्छ चाल की आवश्यकता है। अगर दिलचस्पी है, तो मेरा [उत्तर] देखें (http://stackoverflow.com/a/11192777/254635)। –

3

अन्य एवरों को देखते हुए, आप इसे बिना किसी स्क्रिप्ट के कर सकते हैं।

डालने मोड दर्ज करें, और उसके बाद

<C-R>= 

कहाँ Ctrl +आर आप रजिस्टर उपलब्ध के किसी भी सम्मिलित कर सकते हैं (देखें: मदद i_Ctrl-आर)। लेकिन विशेष रूप से आप एक स्ट्रिंग का मूल्यांकन करने के लिए अभिव्यक्ति रजिस्टर = का उपयोग करेंगे (देखें: सहायता @ =)।

तो, अब आप ib के उत्तर द्वारा प्रस्तुत अभिव्यक्ति डाल सकते हैं। इस दर्ज: अब

$<C-A>"<HOME>"<CR><ESC> 

, आप सामान्य मोड पर वापस होना चाहिए और अभिव्यक्ति एक स्ट्रिंग के लिए मूल्यांकन किया जाना चाहिए था और बफर में रखा गया। आप इसे एक विकल्प कमांड के साथ और साफ़ कर सकते हैं:

:s/\s/\r$/g 

यह प्रत्येक पर्यावरण चर को एक अलग पंक्ति पर रखना चाहिए।

0

आईबी द्वारा विचार और zyx से टिप्पणी के आधार पर, यहाँ समारोह है कि मैं का उपयोग कर समाप्त हो गया है:

function! GetEnvVars() 
    silent execute "normal! :return $\<C-a>')\<C-b>\<C-right>\<Right>\<Del>split('\<CR>" 
endfunction 
संबंधित मुद्दे