कस्टम का उपयोग करने के लिए विम को बताना ।vimrc आसान है, लेकिन इसे ~vvim के बजाय वैकल्पिक पथ का उपयोग करने के लिए कैसे कहें?


15

मैं अपने डिफ़ॉल्ट के बजाय उपयोग vim -u filenameकरने के लिए उपयोग कर सकता filenameहूं .vimrc। मैं इस विधि का उपयोग कर रहा हूँ जब उपयोगकर्ता संदर्भों ( su) को स्विच करने के लिए उपयोग कर रहा हूं, .vimrc भले ही सुपरयूजर के रूप में चल रहा हो।

मैं उसी फ़ोल्डर के लिए भी कैसे प्राप्त कर सकता हूं जो डिफ़ॉल्ट रूप से है ~/.vimताकि मैं कमांड लाइन से वैकल्पिक फ़ोल्डर में विम को इंगित कर सकूं ?


मैं क्या हासिल करना चाहता हूं

ठीक है, उपयोगकर्ता joe( HOME=/home/joe) और उपयोगकर्ता root( HOME=/root) मान लें । उपयोगकर्ता के joeपास एक उपनाम सेट है vimजिसके लिए यह दिखता है (लेकिन मूल रूप $HOMEसे इस गतिशील बनाने के लिए चर का उपयोग करके सेट किया गया है ):

alias vim='vim -p -N -n -i NONE -u "/home/joe/.vimrc"'

तब उपयोगकर्ता (लेकिन जोड़ा जादू के साथ) joeकी तर्ज पर कुछ करता है sudo su -, जिसके परिणामस्वरूप .bashrcऔर अन्य उपहारों /home/joeको लोड किया जाना चाहिए root। उपयोगकर्ता rootअब vimसेट के लिए सटीक एक ही उपनाम है जैसा कि ऊपर दिखाया गया है।

समस्या यह है कि .vimrcइसका उपयोग विभिन्न प्रणालियों और विभिन्न परिदृश्यों में किया जाता है। अक्सर जो के खाते को कहा जाता है joe, लेकिन कभी-कभी यह कुछ ऐसा होगा local.joeया कुछ और होगा, जिसके परिणामस्वरूप एक अलग मूल्य होगा $HOME। इसलिए हार्ड ~/.vimफोल्डर को फोल्ड करने के लिए एब्सोल्यूट पाथ कोडिंग अच्छा आइडिया नहीं लगता। हालाँकि, हमारे ऊपर के परिदृश्य में उपयोगकर्ता के rootपास एक फ़ोल्डर नहीं है /root/.vim, हालाँकि, लोड .vimrc( /home/joe/.vimrc) के माध्यम से डिफ़ॉल्ट रूप से मौजूद होने की उम्मीद है ।

मैं क्या हासिल करना चाहता हूं - अधिमानतः कमांड लाइन पर - /home/joe/.vimजब शुरू किया गया है तब से प्लगइन्स आदि का उपयोग करने के लिए विम को प्राप्त करना है root(यह मानते हुए aliasसेट किया गया है - अन्य मामलों को अनदेखा किया जा सकता है)। यदि VimScript के माध्यम से कुछ गतिशील विधि है, तो कृपया संकेत प्रदान करें। लेकिन जैसे चर का उपयोग करते हुए $HOMEमैं एक पकड़ 22 को ले जाएगा, मुझे लगता है।


आप शायद अच्छे पुराने के साथ ऐसा कर सकते हैं ln। जैसे 'mv ~ / .vim ~ / .vim-जो भी && ln -s ~ / .vim-जो भी ~ / .vim` हो, उसके लिए वही करें .vimrc। कुछ बैश उर्फ ​​के साथ सब कुछ लपेटें ताकि आप आसानी से एक तरह से या दूसरे को स्विच कर सकें
जार

जवाबों:


9

Vim ~ / .vim में दिखता है क्योंकि वह निर्देशिका 'रनटाइमपथ' में डिफ़ॉल्ट सूची में है, जिसे 'rpp' के रूप में संक्षिप्त किया गया है। विम को कहीं और देखने के लिए कहने के लिए, आपको पूरी तरह से एक अलग 'आरटीपी' मान निर्दिष्ट करना होगा, या उदाहरण के लिए विकल्प () में कॉल का उपयोग करके डिफ़ॉल्ट को संपादित करना होगा। अगर आप चाहते हैं कि विम आपकी कॉन्फिगरेशन फाइल्स के लिए पहले एक अलग जगह देखें, तो इस बात का ध्यान न रखें कि यह ~/ .vim में भी दिखता है, और इस बात की परवाह नहीं करें कि यह डायरेक्टरी के बाद आपके ऑप्शन में नहीं दिखता है, कमांड बहुत सरल है:

vim --cmd 'set rtp^=alternate_dir'

देख

:help --cmd
:help :set^=

अपने वैकल्पिक निर्देशिका के साथ .vim को प्रतिस्थापित करना थोड़ा अधिक टाइपिंग लेता है।

vim --cmd 'let &rtp = substitute(&rtp, "\.vim", "alternate", "g")'

मैंने ~/.vimदूसरे रास्ते से बदलने की कोशिश की , लेकिन मैं मैच नहीं कर सका ~, इसलिए मैं आगे बढ़ा और जो मेरे पास था उसे पोस्ट किया।

संपादित करें

जिस कारण से मैं ~'rtp' के मूल्य में मेल नहीं खा सकता था, वह यह है कि जब मान &rtpआउटपुट के बजाय मान के रूप में प्राप्त किया जाता है :set rtp?, ~तो उपयोगकर्ता के होम डायरेक्टरी के पूर्ण पथ नाम तक विस्तारित किया जाता है। ~परिणाम में कोई नहीं है।

निम्नलिखित कार्य करता है।

vim --cmd 'let &rtp = substitute(&rtp, $HOME."/\.vim", "alternate", "g")'

जवाब देने के लिए समय निकालने के लिए एक गुच्छा धन्यवाद। यह बहुत ही आशाजनक लग रहा है । मैं कल थोड़ा इस के साथ छेड़छाड़ करूँगा और आपको बता दूंगा कि यह कैसे चलता है। काश मेरा विमस्क्रिप्ट फू मजबूत होता, लेकिन मैं इस पर काम कर रहा हूं और यह एक आशाजनक दिशा में इशारा करता है।
0xC0000022L

@ 0xC0000022L: जिस तरह से आपने दिखाया वह \\~काम करता है। बैश के लिए एक भागने, मुझे लगता है? वैसे भी यह अभी भी काम नहीं करता है, क्योंकि विमस्क्रिप्ट कैसे संभालता है इसके बारे में कुछ अलग है ~
19x पर 0xC0000022L

मुझे लगता है कि मेरे पास है। ध्यान दें कि :set rtp?"~ / .vim" दिखाता है, लेकिन यह पूर्ण पथ के नाम पर :echo &rtpफैलता ~है। निम्नलिखित कार्य करने के लिए लगता है: `vim --cmd 'let & rtp = स्थानापन्न (& rtp, $ HOME।" / \ / vim "," वैकल्पिक "," g ")'। मैं अपना जवाब अपडेट करूंगा।
गैरीजोन

धन्यवाद, बहुत दिलचस्प और सूक्ष्म अंतर। मेरे विशिष्ट मामले के लिए कुछ चीजों को अधिक समस्याग्रस्त बनाता है, लेकिन मैं स्वीकार करने जा रहा हूं। यह मुझे बहुत आगे मिला।
0xC0000022L

3

आपके द्वारा चुने गए .vimrc में, आप रनटाइम पथ निर्दिष्ट कर सकते हैं:

let &runtimepath=/path/to/specific/vim/folder

यदि आप अपने व्यक्ति का उपयोग कर रहे हैं .vimrcतो आप .vimइसे अपनी व्यक्तिगत निर्देशिका में सेट कर सकते हैं और यह suआपके सामान्य खाते के रूप में काम करना चाहिए ।


यह कमांड लाइन से बिल्कुल नहीं है। क्या इसे गतिशील बनाने का कोई तरीका है? देखिए, मुझे लगता है कि अगर मैं $HOMEअपने खाते में कुछ उपयोग करना चाहता था तो यह हल हो जाएगा, /home/joeलेकिन अभी भी जड़ के रूप में /root... इसलिए कुछ भी नहीं जीता जाता है। यह .vimrcप्लेटफ़ॉर्म और Vim संस्करणों में काम करने वाला है और एक निरपेक्ष पथ को स्थापित करने से पूरी तरह से टूट जाता है। हालांकि, जवाब देने के लिए समय निकालने के लिए धन्यवाद।
0xC0000022L

@ 0xC आप पहले से ही कमांड लाइन से vimrc निर्दिष्ट कर रहे हैं, और यह बदले में रनटाइम पथ को निर्दिष्ट करता है। ध्यान दें कि vimrc में आप वैरिएबल को परिभाषित करने के लिए स्क्रिप्ट चला सकते हैं, इसलिए यदि आप अपने प्रश्न को सटीक परिणाम के साथ संपादित करते हैं तो हम शायद इसे करने का एक तरीका निकाल सकते हैं।
पॉल

मेरे सवाल का संपादन किया। धैर्य के लिए धन्यवाद :)
0xC0000022L

उपयोगकर्ताओं में .bashrc, क्या आप वैरिएबल सेट कर सकते हैं, कह सकते हैं $REALHOME, कि इससे छूट दी गई है sudo reset_envऔर फिर इसके लिए आधार के रूप में उपयोग करें rtp?
पॉल

यह एक व्यवहार्य विकल्प की तरह लगता है । मुझे इस तरह से चर चराना आसान लगा, हालांकि:alias sudosu='sudo su -l root -c "REALHOME='\''/home/joe'\'' /bin/bash --rcfile /home/joe/.bashrc"'
0xC0000022L
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.