सवाल केवल एक निश्चित निर्देशिका पेड़ में फ़ाइलों के लिए vim विकल्प सेट करना?


एक प्रोग्रामिंग प्रोजेक्ट है जो मैं काम करता हूं जहां हर कोई 4 का टैबसाइज का उपयोग करता है, इसलिए मुझे यह सबसे सरल लगता है set tabstop=4 मेरे में ~/.vimrc। हालांकि, मैं इसे संपादित करने वाली प्रत्येक फ़ाइल को प्रभावित नहीं करता - बस इस प्रोजेक्ट के लिए - चलिए प्रत्येक फ़ाइल को एक निश्चित निर्देशिका (और इसकी उपनिर्देशिका) में कहते हैं।

क्या फ़ाइल का निर्देशिका उपसर्ग के आधार पर मैं आसानी से सशर्त रूप से चर सेट कर सकता हूं?


14
2018-05-23 10:05


मूल


stackoverflow.com/questions/1889602/multiple-vim-configurations - Ciro Santilli 新疆改造中心 六四事件 法轮功


जवाब:


केंद्रीय विन्यास

यदि स्थानीय अपवादों को केंद्रीय रूप से कॉन्फ़िगर करना ठीक है, तो आप इस तरह के ऑटोकॉड्स को अपने अंदर डाल सकते हैं ~/.vimrc:

:autocmd BufRead,BufNewFile /path/to/dir/* setlocal ts=4 sw=4

दूसरी ओर, यदि आप प्रोजेक्ट के साथ संग्रहीत विशिष्ट कॉन्फ़िगरेशन चाहते हैं (और इसे सभी फ़ाइलों में एम्बेड करना नहीं चाहते हैं मॉडलाइन्स), आपके पास निम्नलिखित दो विकल्प हैं:

अंतर्निहित कार्यक्षमता के साथ स्थानीय विन्यास

यदि आप हमेशा प्रोजेक्ट रूट निर्देशिका, अंतर्निर्मित से Vim प्रारंभ करते हैं

:set exrc

ए के पढ़ने को सक्षम बनाता है .vimrc वर्तमान निर्देशिका से फ़ाइल। आप रख सकते हैं :set ts=4 sw=4 वहां में आदेश।

प्लगइन के माध्यम से स्थानीय विन्यास

अन्यथा, आपको प्लगइन की मदद चाहिए; vim.org पर कई हैं; मैं सिफारिश कर सकता हूँ localrc प्लगइन, जो स्थानीय फ़ाइल प्रकार-विशिष्ट विन्यास की अनुमति भी देता है।

ध्यान दें कि फ़ाइल सिस्टम से कॉन्फ़िगरेशन पढ़ने में सुरक्षा प्रभाव पड़ता है; आप चाहे तो :set secure


17
2018-05-23 10:54



तीसरा समाधान (प्लगइन) उत्कृष्ट है, और वास्तव में जिस तरह की चीज मैं ढूंढ रहा था। मैं विन्यास को केंद्रीय रूप से डालने से बचने की कोशिश कर रहा हूं, इसलिए आप सही हैं कि पहला आदर्श नहीं है। एक व्यापक उत्तर के लिए धन्यवाद। - Andrew Ferrier
महान! मैं लोकल प्लगइन का भी उपयोग करता हूं; यह वास्तव में उपयोगी है। - Ingo Karkat
अगर किसी और के मुद्दे में चला जाता है autocmd विधि काम नहीं कर रही है, सुनिश्चित करें कि आपके पास आपके पथ में कोई सिम्लिंक नहीं है - मुझे मेरे लिए काम करने से पहले पूर्ण सिमलिंक के साथ पूरा पथ रखना था (ओएस एक्स 10.9 पर) - Dolan Antenucci


आप का उपयोग करके आगे के आदेश पढ़ने के लिए vim को कॉन्फ़िगर कर सकते हैं source (तो) कमांड। इसे अपने में जोड़ें ~/.vimrc - यह वर्तमान निर्देशिका की खोज करता है और यदि .vimrc_proj फ़ाइल नहीं मिली है तो मूल निर्देशिका में .vimrc_proj की खोज होती है।

if filereadable(".vimrc_proj")
    so .vimrc_proj
else
    if filereadable("../.vimrc_proj")
         so .vimrc_proj
    endif
endif

फिर में कोई कस्टम आदेश जोड़ें .vimrc_proj अपनी परियोजनाओं के अनुरूप विन्यास फाइलें।


4
2018-05-23 10:43



मुझे लगता है कि अगर मैं फ़ाइल खोलता हूं तो मैं केवल प्रोजेक्ट की निर्देशिका में हूं, ठीक है? यह संभाल नहीं करता है कि वर्तमान निर्देशिका कुछ अलग है। - Andrew Ferrier
सही, यह एक सीमा है - suspectus


आप इंडेंट का पता लगाने की कोशिश करके समस्या को हल करने के लिए विम के लिए एक प्लगइन का उपयोग कर सकते हैं।

मेरे लिए पसंद की प्लगइन है DetectIndent। प्लगइन के सभी कांटे की जांच करने के लिए मेरे लिए कुछ समय लगा, जो मेरी ज़रूरतों को पूरा करता है। मूल वास्तव में करीब था लेकिन काफी नहीं तो मैंने अपना बना दिया स्वयं का कांटा

डीबगिंग के लिए यह बहुत उपयोगी है :set verbose=1 और प्लगइन फिर से चलाएं :DetectIndent


1
2018-05-25 20:30



मुझे लगता है कि आपने इस जवाब को गलत सवाल पर रखा होगा? यह प्रासंगिक प्रतीत नहीं होता है। - Andrew Ferrier
@AndrewFerrier यह उत्तर पूरी तरह से जगह में है, यह सिर्फ समस्या के लिए अलग दृष्टिकोण प्रस्तुत करता है। विशिष्ट फ़ाइलों के लिए टैब आकार सेट करने के बजाय आप प्रत्येक फ़ाइल के लिए सही टैब आकार का पता लगाने के लिए प्लगइन का उपयोग कर सकते हैं। - gronostaj
@gronostaj मेरा प्रश्न वास्तव में टैब आकार सेट करने के बारे में नहीं था, यह प्रति-निर्देशिका-वृक्ष कॉन्फ़िगरेशन के बारे में था - टैब आकार केवल एक उदाहरण था। लेकिन मैं देखता हूं कि अब आप क्या प्राप्त कर रहे थे, और यह एक उपयोगी युक्ति है। धन्यवाद। - Andrew Ferrier


एक संभावित समाधान जिसका अभी तक उल्लेख नहीं किया गया है, ऊपर एक स्तर पर जाना है और अपने विम पर्यावरण को आग लगाने के लिए प्रोजेक्ट-विशिष्ट शैल स्क्रिप्ट को कार्यान्वित करना है।

यह विम-विशिष्ट सेटिंग्स को पारित करने की अनुमति देता है -S कमांड लाइन विकल्प। लाभ यह है कि यह पर्यावरण के अन्य पहलुओं को कॉन्फ़िगर करने की अनुमति देता है, जैसे टर्मिनल या सेस्कोप सेटिंग्स।

उदाहरण के लिए, मान लें कि मेरे पास एक सी ++ प्रोजेक्ट है foo, जिसके लिए मैं फ़ाइल की vim सेटिंग्स लोड करना चाहता हूँ ~/.vim/projects/foo.vim। मैं कुछ त्वरित लॉन्च टूल या डेस्कटॉप शॉर्टकट से कमांड लागू होने पर भी एक सिस्कोप इंडेक्स सेट अप करना और एक टर्मिनल विंडो लॉन्च करना चाहता हूं। मेरे पर्यावरण को खोलने के लिए, मेरे पास निम्न स्क्रिप्ट है, जिसे बुलाया जाता है vim-foo:

#!/bin/bash

# Script to setup the VIM development environment of my "foo" project
# Includes building ctags and cscope databases.

VIM_CONFIG=$HOME/.vim/projects/foo.vim
BASE_DIR=$HOME/work/foo

function setup_cscope()
{
    CSCOPE_FILES=$BASE_DIR/cscope.files

    created_files=false

    # check if global cscope.files exist
    if [ ! -f $CSCOPE_FILES ]; then
        echo "Creating cscope.files"
        find $BASE_DIR/src -name '*.cpp' -o -name '*.h' >> $CSCOPE_FILES
        created_files=true
    fi

    # create cscope database
    if [ $created_files ] || \ 
        [ ! -f $BASE_DIR/cscope.in.out ] || \
        [ ! -f $BASE_DIR/cscope.po.out ] || \
        [ ! -f $BASE_DIR/cscope.out ]; then
            echo "Creating cscope database"
            cscope -b -q -i $CSCOPE_FILES
            for f in in.out po.out out; do
                mv cscope.$f $BASE_DIR/
            done
    fi

    export CSCOPE_DB=$BASE_DIR/cscope.out
}

# setup everything and finally launch vim
setup_cscope
cd $BASE_DIR
if [[ $TERM == "rxvt-unicode" ]]; then
    vim -S $VIM_CONFIG
else
    urxvt -e vim -S $VIM_CONFIG
fi

0
2017-09-04 11:26