मैं अपनी vimrc फ़ाइल कैसे डिबग करूं?


80

मुझे विम में समस्या है, और मुझे लगता है कि यह मेरी vimrcफ़ाइल में हो सकता है (या कहा गया है कि यह मेरी vimrcफ़ाइल हो सकती है )।

मैं इसे कैसे सत्यापित करूं? यदि यह है मेरी vimrcफ़ाइल, मुझे कैसे पता जहां कर बिल्कुल समस्या है?

जवाबों:


79

पहली बात यह है कि आप डिफ़ॉल्ट सेटिंग्स के साथ विम को शुरू करना चाहते हैं:

vim -u NONE -U NONE -N

-u NONEअपने vimrc लोड करने से रोकता है विम, -U NONEअपने gvimrc लोड करने से विम रोकता है, और -Nविम बताता है कोई संगत मोड का उपयोग करने के लिए (यह आवश्यक नहीं है, लेकिन सबसे विम उपयोगकर्ताओं 'उपयुक्त' मोड के लिए इस्तेमाल नहीं कर रहे हैं)। ध्यान दें कि NONEहै की आवश्यकता सभी टोपियां में किया जाना है।

विंडोज में आप एक नया शॉर्टकट 1 बनाकर इन झंडों को जोड़ सकते हैं

  • यदि समस्या बनी रहती है, तो आप जानते हैं कि यह आपके vimrc में कुछ नहीं है।

  • यदि समस्या गायब हो जाती है, तो अब आप अपनी vimrc फ़ाइल में कुछ के कारण होते हैं ।

यह मेरा vimrc नहीं है!

हुर्रे! जाओ और अपना प्रश्न पूछो। यह उल्लेख करना सुनिश्चित करें कि आपने विम फ़ाइल के बिना विम शुरू करने का प्रयास किया है!

तो यह मेरा vimrc है, अब क्या है?

यदि आप पहले से ही नहीं है, तो आप शायद अपनी vimrc फ़ाइल की बैकअप प्रतिलिपि पहले सहेजना चाहते हैं।

प्लगइन्स की जाँच करें

अगली चीज़ जो आप शायद करना चाहते हैं, पहले सभी प्लगइन्स को अक्षम कर दें; प्लगइन्स विम में काफी बदल सकते हैं। यदि यह समस्या को ठीक करता है, तो यह पता लगाने की कोशिश करें कि कौन सा प्लगइन उन्हें एक-एक करके फिर से सक्षम कर रहा है। यह पता लगाने के बाद कि कौन सा प्लगइन वास्तव में समस्या का कारण बनता है, आप इस प्लगइन के प्रलेखन को पढ़कर और इसे ठीक कर सकते हैं, और / या के साथ टैग किए गए प्रश्न पूछकर plugin-<name>

यदि यह एक प्लगइन नहीं है, और आपके पास कोई विचार नहीं है कि आपकी समस्या क्या है, तो यह एक परीक्षण-और-त्रुटि प्रक्रिया है। अपने vimrc में एक या एक से अधिक लाइनें लिखें, Vim शुरू करें, जांचें कि क्या समस्या होती है, और इस प्रक्रिया को तब तक दोहराएं जब तक समस्या होना बंद न हो जाए। ऐसा करने का सबसे तेज़ तरीका है:

  1. अपनी आधी फ़ाइल के बारे में टिप्पणी (या निकालें) करें।
  2. Vim को पुनरारंभ करें, या एक नया Vim खोलें (vimrc को फिर से लोड करना काफी अच्छा नहीं है, क्योंकि सेटिंग्स परेशान नहीं हैं)।
  3. क्या अब समस्या दूर हो गई है? आपके द्वारा हटाए गए हिस्से को वापस रखें (विम को खुला रखना और पूर्ववत उपयोग करना यहां उपयोगी है) और आपके द्वारा जोड़े गए भाग पर चरण 1 दोहराएं।
  4. क्या समस्या अभी भी होती है? चरण 1 पर जाएं।

अंत में आपके पास एक एकल विकल्प या कुछ विकल्पों का एक संयोजन होना चाहिए जो आपकी समस्या का कारण बनता है। आप का उपयोग करके विम में किसी भी विकल्प के बारे में अधिक जानकारी प्राप्त कर सकते हैं:

:help 'option_name'

यहां उद्धरण महत्वपूर्ण हैं, यह आमतौर पर उनके बिना काम करता है, लेकिन कभी-कभी आप गलत पृष्ठ पर समाप्त होते हैं यदि आप उन्हें छोड़ देते हैं।

यदि आप सहायता पृष्ठ को पढ़ने के बाद भी भ्रमित हैं, तो आप जानते हैं कि प्रश्न कहाँ पूछना है ;-)

एक एकल प्लगइन डिबगिंग

यदि आप किसी एकल प्लगइन को अलग करना चाहते हैं, तो शायद इसके बारे में एक सवाल पूछना है, आप जितना संभव हो उतना कम लोड करना चाहते हैं लेकिन फिर भी प्लगइन लोड करना चाहते हैं ; आप आसानी से विम के पैकेज सुविधा के साथ ऐसा कर सकते हैं। इसके लिए Vim 8 या Neovim के हालिया संस्करण की आवश्यकता है।

  1. एक नई खाली निर्देशिका बनाएं; हम ~/pluginइस उदाहरण में पथ का उपयोग करेंगे । अब प्लगइन को नियमित pack/plugins/start/$nameनिर्देशिका में रखें। उदाहरण के लिए:

    git clone https://github.com/fatih/vim-go.git ~/plugin/pack/plugins/start/vim-go
    
  2. test-vimrcनिम्नलिखित सामग्री के साथ एक फ़ाइल बनाएं ; इस यह सुनिश्चित करेंगे कि विम से प्लग-इन लोड होगा ~/pluginनिर्देशिका और ~/.vim निर्देशिका:

    set nocompatible
    set packpath=~/plugin,/usr/share/vim/vimfiles,/usr/share/vim/vim80,/usr/share/vim/vimfiles/after,~/plugin/after
    packloadall!
    
    syntax on
    filetype plugin indent on
    
  3. इसके साथ विम शुरू करें:

    vim -U NONE -u ~/test-vimrc
    

    अब आपके पास केवल इस एकल प्लगइन के साथ एक न्यूनतम vimrc है।


फुटनोट

1 उदाहरण के लिए: 64 बिट विंडोज पर, शॉर्टकट कुछ इस तरह दिखाई देगा "C:\Program Files (x86)\Vim\vim74\vim.exe" -u NONE -U NONE -N:। इसे बनाने के लिए, जहाँ आप शॉर्टकट चाहते हैं, फ़ाइल एक्सप्लोरर में राइट क्लिक करें, फिर नया -> शॉर्टकट चुनें और शॉर्टकट टेक्स्ट पेस्ट करें। यदि आपका विम किसी अन्य स्थान पर स्थापित है, तो आपको विम पथ को बदलने की आवश्यकता हो सकती है।


7
इस तकनीक को बाइनरी सर्च फॉल्ट लोकलाइजेशन कहा जाता है ।
तोमकाडो

2
जब आप अपने बग का पता लगा लेते हैं, तो यह आपके द्वारा .vimrc संस्करण नियंत्रण में रखने के लिए शुरू करने के लिए एक शानदार समय होगा :) यह लगभग हमेशा आपके द्वारा किए गए अंतिम परिवर्तनों में से एक होने जा रहा है जिससे सामान अजीब तरीके से व्यवहार करता है।
एस्क्रेफर्ड

1
-U NONEयदि आपके पास है, तो आपको इसकी आवश्यकता नहीं है -u NONE
एंटनी

@MartinTournoij मैंने पहली बार पाठक को समझने में आसान बनाने के लिए एक संपादन का सुझाव दिया । मुझे उम्मीद है आप इसे पसंद करेंगे। धन्यवाद!
jpaugh

1
धन्यवाद @jpaugh; मुझे लगता है कि आदेश अधिक समझ में आता है।
मार्टिन टूरनोइज

31

-Dडिबगिंग के लिए विशेष रूप से विम पैरामीटर है जो किसी स्क्रिप्ट से पहली कमांड निष्पादित करने के बाद डीबगिंग मोड में जाएगा।

उदाहरण के लिए डिबग मोड में विम को बिना किसी प्लग इन के चलाने के लिए:

vim --noplugin -D

अगली पंक्ति को पार्स करने के लिए टाइप n/ nextदबाए रखें Enter

और contया qवापस लिए जाने के लिए vimइंटरफेस।

यदि आप GUI संस्करण का उपयोग कर रहे हैं, तो guiउस कमांड के ठीक बाद डिबगिंग शुरू करने के लिए अपने vimrc में एक कमांड डालें ।

उपलब्ध आदेशों की सूची के लिए Ctrl+ दबाएँd

अधिक पढ़ें:


1
यह .vimrc फ़ाइल में एक साधारण गलती खोजने में सबसे अधिक मददगार था जो एक त्रुटि संदेश दे रहा था। यह कोशिश कर रहा है पहले के रूप में यह करने के लिए जल्दी है लायक।
रिचवेल

1
@kenorb यह कमांड कमाल की है, मुझे दूसरे संपादक के पास जाने से बचाएं।
TheLazyChap

11

जैसा कि पहले ही उल्लेख किया गया है, पहले vim -u NONE -U NONE -Nयह सुनिश्चित करने का प्रयास करें कि आपका वेनिला विम ठीक काम कर रहा है।

फिर सामान्य रूप से शुरू करें और जांचें

:messages

समस्या के बाद अंदर से, जो सभी चेतावनियों और त्रुटियों को दिखाएगा।

अंत में निम्नलिखित कमांड के साथ विम शुरू करें

vim -V9logfile.log

जो लॉगफ़ाइल नामक एक लॉग बनाएगा logfile.log, -V9लॉगिंग स्तर है और आपकी समस्या को पुन: उत्पन्न करने का प्रयास करता है।


11

एक और टिप: गुफा के रूप में जैसा कि यह प्रतीत हो सकता है, मुझे जोड़ने के लिए पसंद है: echom "संदेश" मेरे .vimrc को देखने के लिए कि क्या निष्पादित किया जा रहा है और क्या नहीं है।

उदाहरण के लिए

if executable('ag')
  :echom "AG FOUND"

  ...
endif

यह मुझे जल्दी से यह देखने में मदद करता है कि क्या ब्लॉक को निष्पादित किया जा रहा है, आदि संदेश कंसोल पर मुद्रित हो जाएगा जब आप अगली बार शुरू करते हैं।


6
और यदि आप echomएक और दिलचस्प कमांड का उपयोग करते हैं :messages, तो संदेशों के पूर्ण लॉग को प्राप्त करने के लिए है। स्टार्टअप के बाद उन्हें देखना कभी-कभी उपयोगी हो सकता है।
statox

यह लगभग वही है जो मुझे चाहिए था, मैं यह देखना चाहता हूं कि cpoptions का मूल्य मेरे vimrc के एक बिंदु पर क्या है, मैं ": cpoptions सेट" के आउटपुट को कैसे प्रतिध्वनित करता हूं? ?
माइक लिपर्ट

10

एक चीज जो मुझे मिली है वह है चर का संग्रह रखना जो आपके कुछ हिस्सों को टॉगल करता है .vimrcताकि आप सामान को कमेंट किए बिना उसे निष्क्रिय या निष्क्रिय कर सकें। यह आपको अपने संगठन के बारे में सोचने के लिए मजबूर करने का सुखद दुष्प्रभाव भी है .vimrc

" feature toggles in vimrc
let g:vimrc_feat_pathogen               = 1
let g:vimrc_feat_core_minimal           = 1
let g:vimrc_feat_matchit                = 1
let g:vimrc_feat_options                = 1
let g:vimrc_feat_colors_and_highlight   = 1
let g:vimrc_feat_key_rebinding_arpeggio = 1
let g:vimrc_feat_key_rebinding          = 1
let g:vimrc_feat_autocommand_group      = 1
let g:vimrc_feat_custom_definitions     = 1
let g:vimrc_feat_load_opam              = 1

यहाँ एक अनुभाग का उदाहरण दिया गया है if:

if g:vimrc_feat_core_minimal
    set nocompatible
    filetype plugin indent on
    syntax on
endif

1

मेरा vimrc लोडिंग समय बहुत धीमा था, लगभग 400ms, और मैंने इसे केवल इस लाइन को हटाकर 20ms तक घटा दिया:

silent !mkdir ~/.config/nvim/backups > /dev/null 2>&1

सुनिश्चित करें कि आपके पास बाहरी आदेशों की तरह कॉल नहीं है।


1
साइट पर आपका स्वागत है! यह एक उपयोगी tidbit है, लेकिन यह बहुत सामान्य प्रश्न की तुलना में थोड़ा अधिक विशिष्ट है। इस प्रश्न के उत्तर के रूप में इसे बेहतर तरीके से जोड़ा जा सकता है , या, यदि आप केवल ज्ञान साझा करना चाहते हैं, तो आप शायद अपने स्वयं के प्रश्न का उत्तर दे सकते हैं?
रिच

0

यहां आपको आरंभ करने के लिए एक सरल प्रक्रिया है।

  1. अपनी संपूर्ण .vimrc फ़ाइल की सामग्री बाहर टिप्पणी करें
  2. अपने .vimrc को पुनः लोड करके :source %या चलाकर:so $MYVIMRC
  3. फ़ाइल का एक डिस्क्राइब्ड भाग (आमतौर पर ऊपर से शुरू)
  4. चरण 2 और 3 को तब तक दोहराएं जब तक आपको त्रुटि न मिल जाए।
  5. त्रुटि को ठीक करें।

1
यह उत्तर बहुत बेहतर हो सकता है यदि आपने इसे ठीक से कैपिटल और पंक्चर किया हो।

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