विम - विम शुरू करने पर तुरंत कमांड कैसे चलाएं?


103

मेरे पास एक प्लगइन है (FindFile.vim) जिसे चलाने की आवश्यकता है :FindFileCache .जब भी मैं जल्दी खोलने के लिए फ़ाइल कैश इकट्ठा करने के लिए विम शुरू करता हूं .. मुझे हर बार जब भी मैं विम शुरू करता हूं, तो इसे चलाना होगा।

मैं एक कमांड कैसे लिख सकता हूं जो एक बार चलती है, हर बार जो विम शुरू होता है?

जवाबों:


145

आपके कॉन्फ़िगरेशन सामान को रखने का सबसे अच्छा स्थान आपकी .vimrc फ़ाइल में है। हालाँकि, यह बहुत जल्दी शुरू होता है, जाँच करें :h startup:

At startup, Vim checks environment variables and files and sets values
accordingly.  Vim proceeds in this order:

1. Set the 'shell' and 'term' option                *SHELL* *COMSPEC* *TERM*
2. Process the arguments
3. Execute Ex commands, from environment variables and/or files *vimrc* *exrc*
4. Load the plugin scripts.                                 *load-plugins*
5. Set 'shellpipe' and 'shellredir'
6. Set 'updatecount' to zero, if "-n" command argument used
7. Set binary options
8. Perform GUI initializations
9. Read the viminfo file
10. Read the quickfix file
11. Open all windows
12. Execute startup commands

जैसा कि आप देख सकते हैं, प्लगइन्स से पहले आपका .vimrc लोड हो जाएगा। यदि आप इसमें डालते :FindFileCache .हैं तो एक त्रुटि आएगी, क्योंकि यह कमांड अभी तक मौजूद नहीं है। (यह प्लगइन 4. चरण में लोड होने के बाद मौजूद होगा)

इसे हल करने के लिए, कमांड को सीधे निष्पादित करने के बजाय, एक ऑटो-कमांड बनाएं। जब कोई घटना होती है तो ऑटो-कमांड कुछ कमांड निष्पादित करते हैं। इस स्थिति में, VimEnter ईवेंट उपयुक्त (से :h VimEnter) दिखता है :

                                                    *VimEnter*
VimEnter                    After doing all the startup stuff, including
                            loading .vimrc files, executing the "-c cmd"
                            arguments, creating all windows and loading
                            the buffers in them.

फिर, इस लाइन को अपने .vimrc में रखें :

autocmd VimEnter * FindFileCache .

2
+1, यह स्वीकृत उत्तर होना चाहिए, यह एक कमांड के लिए एक अलग फाइल बनाने की तुलना में बहुत साफ है।

मैं जोड़ना चाहता हूं कि ई 172 के साथ मुझ पर यह ब्रेक था क्योंकि मेरे पास एक जगह थी।
कैरोलीन

कॉल करने के लिए इस दृष्टिकोण का उपयोग करने की कोशिश की गई: AnsiEsc हालांकि इसका वास्तव में वांछित प्रभाव नहीं था - कोई भी मौका जिसे आप जानते हैं कि कैसे पता करें कि क्या कमांड जैसे: AnsiEsc को पहले चलाया गया है?
सेर

89

विम का -c झंडा भी है। मैं अपने tmuxp कॉन्फिग में यह करता हूं कि वर्टिकल स्प्लिट के साथ vim स्टार्ट करना है:

vim -c "vnew"

कम से कम नवविवाह के साथ आप एक ही समय में एक फ़ाइल भी खोल सकते हैं:

nvim -c "colorscheme mustang" some_file

6
धन्यवाद, यह वही है जिसकी मुझे तलाश थी। कभी-कभी, मुझे बस एक अस्थायी स्टार्टअप कमांड चलाने की आवश्यकता होती है, जैसे विभाजन दिखाया गया है, और इसे मेरे vimrc फ़ाइल में संग्रहीत करने की आवश्यकता नहीं है
20:16

यह एक फ़ाइल नहीं खोल सकता है:vim -c ':colo default' test.txt
वैन abel

1
मेरे लिए भी बिल्कुल सही - मैं उपयोग कर रहा हूं xolox/vim-notesऔर मुझे एक फिश फंक्शन चाहिए, जो जाने के लिए तैयार नए नोट के साथ विम को खोलता है।
wsams

13

नाम की एक फाइल बनाएं ~/.vim/after/plugin/whatever_name_you_like.vimऔर उसे भरें

FindFileCache .

जिस क्रम में लिपियों को पढ़ा जाता है और विम निर्देशिका में निष्पादित किया जाता है, उसमें वर्णित है :help 'runtimepath'


2

अन्य उत्तरों की तुलना में बाद में भी प्राप्त करने के लिए लेकिन अभी भी स्टार्टअप के बाद, .vimrc में टाइमर का उपयोग करें। उदाहरण के लिए, .vimrc में यह कोड वैरिएबल सेट करने से पहले स्टार्टअप के बाद आधा सेकेंड इंतजार करता है।

function DelayedSetVariables(timer)
    let g:ycm_filetype_blacklist['ignored'] = 1
endfunction
let timer=timer_start(500,'DelayedSetVariables')

(उदाहरण में चर YouCompleteMe प्लगइन से ब्लैकलिस्ट है। मेरा मानना ​​है, प्लगइन कुछ अन्य प्रक्रिया को अतुल्यकालिक रूप से शुरू करता है जो तब चर बनाता है, लेकिन समय के शुरू होने तक काफी तैयार नहीं है। चर मौजूद नहीं है, क्योंकि मैं कोशिश करता हूं। इसे .vimrc, फ़ाइल के बाद, या VimEnter ईवेंट में सेट करें। यह किसी तरह मेरे विंडोज सिस्टम के लिए विशिष्ट है, YCM प्रलेखन का कहना है कि .vimrc विकल्पों को सेट करने के लिए काम करना चाहिए।)


1

FindFileCacheअपने में रखो .vimrc

स्वतः लोड आदेश अलग हैं और आपके परिदृश्य के लिए काम नहीं करेंगे।


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