নির্দিষ্ট ডিরেক্টরি ট্রিতে কেবলমাত্র ফাইলের জন্য ভিএম অপশন সেট করা হচ্ছে?


15

আমি যেখানে কাজ করি সেখানে একটি প্রোগ্রামিং প্রকল্প রয়েছে যেখানে প্রত্যেকে 4 এর ট্যাব আকার ব্যবহার করে, তাই আমি এটিকে সবচেয়ে সহজ বলে মনে করি set tabstop=4 হয় ~/.vimrc। যাইহোক, আমি এটি সম্পাদনা করে এমন প্রতিটি ফাইল - এই প্রকল্পের জন্য কেবল তারাই প্রভাব ফেলতে চাই না - আসুন প্রতিটি ফাইলকে একটি নির্দিষ্ট ডিরেক্টরিতে (এবং এর উপ-ডিরেক্টরিগুলি) বলি।

ফাইলের ডিরেক্টরি উপসর্গের উপর ভিত্তি করে আমি কীভাবে শর্তাধীন শর্তসাপেক্ষে ভেরিয়েবলগুলি সেট করতে পারি এমন কোনও উপায় আছে?


উত্তর:


19

কেন্দ্রীয় কনফিগারেশন

যদি স্থানীয় ব্যতিক্রমগুলি কেন্দ্রীয়ভাবে কনফিগার করা ঠিক থাকে তবে আপনি এই জাতীয় অটোমডিএস আপনার মধ্যে রাখতে পারেন ~/.vimrc:

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

অন্যদিকে, আপনি যদি প্রকল্পের সাথে সঞ্চিত নির্দিষ্ট কনফিগারেশনটি চান (এবং এটি মডেলাইনগুলির মাধ্যমে সমস্ত ফাইলে এম্বেড করতে চান না ) ), আপনার নিম্নলিখিত দুটি বিকল্প রয়েছে:

অন্তর্নির্মিত কার্যকারিতা সহ স্থানীয় কনফিগারেশন

আপনি যদি সর্বদা প্রকল্পের রুট ডিরেক্টরি থেকে অন্তর্নির্মিত ভিম শুরু করেন

:set exrc

.vimrcবর্তমান ডিরেক্টরি থেকে একটি ফাইল পড়া সক্ষম করে । আপনি রাখতে পারেন:set ts=4 sw=4 কমান্ডগুলি সেখানে রাখতে পারেন।

প্লাগইন মাধ্যমে স্থানীয় কনফিগারেশন

অন্যথায়, আপনার একটি প্লাগইনের সহায়তা প্রয়োজন; vim.org এ বেশ কয়েকটি রয়েছে; আমি লোকালসিআর প্লাগইনটি সুপারিশ করতে পারি , যা এমনকি স্থানীয় ফাইল টাইপ-নির্দিষ্ট কনফিগারেশনের অনুমতি দেয়।

নোট করুন যে ফাইল সিস্টেম থেকে পাঠ্য কনফিগারেশনটিতে সুরক্ষা জড়িত রয়েছে; আপনি চান করতে পারেন :set secure


1
তৃতীয় সমাধান (প্লাগইন) দুর্দান্ত এবং আমি ঠিক কী ধরণের জিনিস খুঁজছিলাম। আমি কনফিগারেশনটি কেন্দ্রীয়ভাবে স্থাপন এড়াতে চাইছি, তাই আপনি সঠিক যে প্রথমটি আদর্শ নয়। একটি বিস্তৃত উত্তরের জন্য ধন্যবাদ।
অ্যান্ড্রু ফেরিয়ার

গ্রেট! আমি লোকালসিআর প্লাগইন ব্যবহার করি; এটা সত্যিই দরকারী।
ইনগো কারকাত

অন্য কেউ যদি autocmdপদ্ধতিতে কাজ না করার সমস্যা নিয়ে আসে তবে নিশ্চিত হয়ে নিন যে আপনার পথে আপনার কোনও প্রতিলিপি না রয়েছে - এটি আমার পক্ষে কাজ করার আগে আমাকে কোনও সিমলিংক সহ পুরো পথটি রাখতে হবে (OS X 10.9 এ)
দোলান অ্যান্টুচি

4

আপনি source(so) কমান্ডটি ব্যবহার করে আরও কমান্ডগুলি পড়তে ভিএমকে কনফিগার করতে পারেন । আপনার এই যোগ ~/.vimrc- এটি বর্তমান ডিরেক্টরি অনুসন্ধান করে এবং যদি .vimrc_proj ফাইল নয় অভিভাবক সংকলনে .vimrc_proj সেখানে অনুসন্ধান পাওয়া যায় নি।

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

তারপরে .vimrc_projআপনার প্রকল্পগুলির জন্য উপযুক্ত কনফিগারেশন ফাইলগুলিতে কোনও কাস্টম কমান্ড যুক্ত করুন ।


আমি মনে করি যে আমি যখন ফাইলটি খুলি তখনই আমি প্রকল্পের ডিরেক্টরিতে থাকি তবেই কাজ করে? এটি হ্যান্ডেল করে না যেখানে বর্তমান ডিরেক্টরিটি সম্পূর্ণ আলাদা is
অ্যান্ড্রু ফেরিয়ার

সঠিক, এটি একটি সীমাবদ্ধতা
সন্দেহভাজন

1

ইন্ডেনশন সনাক্ত করার চেষ্টা করে আরও সাধারণ উপায়ে সমস্যার সমাধান করতে আপনি ভিমের জন্য একটি প্লাগইন ব্যবহার করতে পারেন।

আমার জন্য পছন্দের প্লাগইনটি হ'ল ডিটেক্টইন্ডেন্ট । আমার প্রয়োজন অনুসারে এমন একটি সন্ধান করতে আমার প্লাগইনটির সমস্ত কাঁটাচামচ পরীক্ষা করতে কিছু সময় নিয়েছে। আসলটি সত্যিই নিকটে ছিল তবে বেশিরভাগ নয় তাই আমি নিজের কাঁটাচামচ তৈরি করেছিলাম ।

ডিবাগিংয়ের জন্য এটি :set verbose=1আবার প্লাগইনটি দিয়ে চালানো এবং চালানোতে খুব সহায়ক:DetectIndent


আমার ধারণা আপনি এই উত্তরটি ভুল প্রশ্নে রেখেছেন? এটি প্রাসঙ্গিক বলে মনে হচ্ছে না।
অ্যান্ড্রু ফেরিয়ার

@ অ্যান্ড্রুফেরিয়ার এই উত্তরটি পুরোপুরি ঠিক জায়গায় রয়েছে, এটি সমস্যার জন্য ভিন্ন মনোভাবের উপস্থাপনা করে। নির্দিষ্ট ফাইলগুলির জন্য ট্যাব আকার নির্ধারণের পরিবর্তে আপনি প্রতিটি ফাইলের জন্য সঠিক ট্যাব আকার সনাক্ত করতে একটি প্লাগইন ব্যবহার করতে পারেন।
গ্রোনস্টাজ

@ গ্রনোস্টাজ আমার প্রশ্নটি আসলে ট্যাব আকার নির্ধারণের বিষয়ে নয়, এটি প্রতি ডিরেক্টরি-ট্রি-ট্রি কনফিগারেশন সম্পর্কে ছিল - ট্যাব আকারটি কেবল একটি উদাহরণ। তবে আমি দেখতে পাচ্ছি যে আপনি এখন কী পাচ্ছেন এবং এটি একটি দরকারী টিপ। ধন্যবাদ।
অ্যান্ড্রু ফেরিয়ার

0

একটি সম্ভাব্য সমাধান যা এখনও উল্লেখ করা হয়নি তা হ'ল উপরের এক স্তরটিতে গিয়ে প্রকল্প-নির্দিষ্ট শেল স্ক্রিপ্টগুলি আপনার ভিএম পরিবেশের আগুন জ্বালানোর জন্য প্রয়োগ করা।

এটি -Sকমান্ড-লাইন বিকল্পটি ব্যবহার করে ভিম-নির্দিষ্ট সেটিংসটি পাস করার অনুমতি দেয় । সুবিধাটি হ'ল এটি পরিবেশের অন্যান্য দিকগুলি যেমন টার্মিনাল বা সিস্কোপ সেটিংস কনফিগার করার অনুমতি দেয়।

উদাহরণস্বরূপ, আসুন আমি বলি যে আমার কাছে একটি সি ++ প্রকল্প রয়েছে foo, যার জন্য আমি ফাইলটির ভিএম সেটিংস লোড করতে চাই ~/.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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.