vundle “filetype plugin indent on” टैबविज़न के साथ गड़बड़ करता है


9

मैंने कल vundle स्थापित किया था और जब से मैंने किया था, मैंने अपने vimrc में कॉन्फ़िगर की गई टैब की अनदेखी की और 2 के बजाय 4 पर वापस सेट किया।

मुझे पता चला कि vundle पैराग्राफ के बाद की निम्नलिखित रेखा यह पैदा कर रही है:

filetype plugin indent on

मेरा इंडेंटेशन इस तरह सेट किया गया है:

set noexpandtab " Make sure that every file uses real tabs, not spaces
set shiftround  " Round indent to multiple of 'shiftwidth'
set smartindent " Do smart indenting when starting a new line
set autoindent  " Copy indent from current line, over to the new line

" Set the tab width
let s:tabwidth=2
exec 'set tabstop='    .s:tabwidth
exec 'set shiftwidth=' .s:tabwidth
exec 'set softtabstop='.s:tabwidth

आप यहाँ पर मेरी पूरी जांच कर सकते हैं

मैंने पायथन लिपि (जहां इंडेंटेशन वास्तव में मायने रखता है) का उपयोग करके इंडेंटेशन समस्या का परीक्षण किया।

मैंने पहले से ही बदलने की कोशिश की filetype plugin indent on, filetype plugin onलेकिन वह कुछ भी नहीं बदलता है। केवल उस लाइन पर टिप्पणी करने से मदद मिलती है।
अब, vundle इंस्टॉल गाइड कहता है, इस लाइन की आवश्यकता है।

मैं इस इंडेंट मुद्दे को कैसे ठीक करूं? क्या मैं फ़िल्टाइप लाइन को केवल ommit कर सकता हूं या क्या वास्तव में इसे vimrc में रखना अनिवार्य है?

समाधान:

@ChristianBrabandt और @romainl की बदौलत मुझे अब एक ऐसा समाधान मिल गया है जो एकल vvrc फ़ाइल में भी निवास कर सकता है:

filetype plugin indent on

[...]

set noexpandtab " Make sure that every file uses real tabs, not spaces
set shiftround  " Round indent to multiple of 'shiftwidth'
set autoindent  " Copy indent from current line, over to the new line

" Set the tab width
let s:tabwidth=2
au Filetype * let &l:tabstop = s:tabwidth
au Filetype * let &l:shiftwidth = s:tabwidth
au Filetype * let &l:softtabstop = s:tabwidth

हालांकि यह आपके सवाल का जवाब नहीं देता है, मैंने Vundle के बजाय विम-प्लग के साथ प्रयास किया और यह पूरी तरह से काम किया ...
nobe4


आप नई OptionSet ऑटोकॉमैंड का उपयोग शिफ्टिंग और सॉफ्टटैबटॉप सेटिंग को रीसेट करने के लिए भी कर सकते हैं
क्रिश्चियन

जवाबों:


10

पहली चीजें पहले; नीचे की लाइन का वंडले या प्लगइन प्रबंधन से कोई लेना- देना नहीं है:

filetype plugin indent on

वह आदेश तीन काम करता है:

  • सक्षम बनाता है filetype का पता लगाने,
  • सक्षम बनाता है filetype- विशिष्ट स्क्रिप्ट (ftplugins),
  • सक्षम बनाता है filetype- विशिष्ट इंडेंट स्क्रिप्ट।

यह रेखा इसलिए है क्योंकि कुछ प्लगइन प्रबंधकों को यह सुनिश्चित करना होता है कि उनके जादू करने से पहले फिलाटाइप डिटेक्शन को निष्क्रिय कर दिया गया है और प्रोग्रामिंग के लिए विम का उपयोग करने से फ़्लिपगिंस और उचित इंडेंटेशन के बिना बहुत कठिन चूसना होगा। यह मेरी राय है कि वे केवल आंतरिक रूप से अच्छी तरह से filetype का पता लगाने के साथ सौदा करना चाहिए ...

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

पूरी तरह से फुटप्लगिन के सोर्सिंग से बचने का आसान तरीका होगा:

filetype indent on

लेकिन वे आमतौर पर उपयोगी सामान के साथ आते हैं ताकि विधि वास्तव में अनुशंसित नहीं हो।

सबसे साफ समाधान filetypeअपने "इष्टतम" राज्य में लाइन छोड़ना है :

filetype plugin indent on

और अपने स्वयं के साथ उनके ओवरराइड को ओवरराइड करें after/ftplugin/python.vim:

setlocal noexpandtab
setlocal shiftround
setlocal autoindent

let s:tabwidth=2
let &l:tabstop = s:tabwidth
let &l:shiftwidth = s:tabwidth
let &l:softtabstop = s:tabwidth

टिप्पणियाँ:

  • मैंने हटा दिया smartindentक्योंकि यह वैसे भी शुरू करने के लिए स्मार्ट नहीं है और वैसे भी फ़िल्टाइप-विशिष्ट इंडेंट स्क्रिप्ट द्वारा चित्रित किया गया है।
  • मैंने अनावश्यक आज्ञा से बचने के लिए आपकी :executeआज्ञाओं को क्लीनर :letआदेशों से बदल दिया ।

1
यदि आप shiftwidthशून्य और softtabstop-1 पर सेट करते हैं तो यह टैबटॉप सेटिंग का अनुसरण करेगा।
क्रिश्चियन ब्रेबांट

आपके स्पष्टीकरण के लिए धन्यवाद। मैं अपनी अधिकांश सेटिंग्स को अपने vimrc में बनाए रखना चाहता हूं क्योंकि मैं उन्हें कई कंप्यूटरों में सिंक करना चाहता हूं। मैंने आपके समाधान का उपयोग अपने vimrc में किया था और अपने प्रश्न के नीचे पोस्ट किए गए faq लिंक @ChristianBrabandt का उपयोग किया था और यह काम करता है। मैं अपने समाधान को शामिल करने के लिए अपने प्रश्न को संपादित करूँगा।
wulxz

4

इंडेंटेशन प्रॉब्लम ftplugin से आती है, जो /usr/share/vim/vim-version-/ftplugin/-filetype-.vimआपके .vimrcफाइल में जो कुछ भी है उसे ओवरव्यू से लोड करती है । आप यह पता लगा सकते हैं कि विम के अंदर निम्न कमांड को चलाने से वह फाइल कहां है :verbose set tabstop?। आउटपुट आपको उस फ़ाइल को इंगित करेगा जो आपके कॉन्फ़िगरेशन को ओवरराइड कर रही है।

मेरे मामले में मुझे अपने अजगर इंडेंटेशन कॉन्फ़िगरेशन के साथ समस्या हो रही थी।

इसे हल करने का एक आसान तरीका निम्नलिखित है:

अपने होम फोल्डर में .vim फोल्डर बनाएं (यदि आपके पास नहीं है)

cd ~/.vim
mkdir -p after/ftplugin/
cd ~/.vim/after/ftplugin/
vim python.vim

निम्नलिखित जोड़ें:

setlocal noexpandtab shiftwidth=4 softtabstop=4 tabstop=4

आप जो कुछ भी कमांड में चाहते हैं उसे संशोधित करें। मेरा ऐसा दिखता है क्योंकि मैं व्हाट्सएप के बजाय टैब के साथ काम करता हूं।

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