সংক্ষেপে
এটি করার কয়েকটি উপায় রয়েছে যার মধ্যে বেশিরভাগেরই পরামর্শ দেওয়া হয়েছে, তবে আমি ভেবেছিলাম দুটি অতিরিক্ত সংখ্যার সাথে এগুলি সংক্ষিপ্ত করব:
- প্রতি ডিরেক্টরি vimrc - এর অসুবিধা রয়েছে যে ভিমকে সঠিক ডিরেক্টরিতে শুরু করতে হবে: আপনার প্রকল্পটি যদি থাকে
~/project1
এবং আপনার কাছে থাকে ~/project1/.vim.custom
এবং থাকেcd ~ ; vim project1/file.c
তবে কাস্টম সেটিংস পাওয়া যাবে না।
- পরিবর্তনসমূহ - খুব কার্যকর, তবে এগুলিকে সমস্ত ফাইলে যুক্ত করার প্রয়োজনের অসুবিধা রয়েছে (এবং এগুলিকে নতুন ফাইলে যুক্ত করার কথা মনে রাখবেন)
- ডিরেক্টরি নির্দিষ্ট অটোম্যান্ডস - এটি খুব কার্যকর
- ফাইলটিতে একটি নির্দিষ্ট শিরোলেখের জন্য স্ক্যান করুন (নীচে দেখুন) - এটিই আমি অতীতে বেশিরভাগ ক্ষেত্রে ব্যবহার করেছি যেখানে বিভিন্ন সংস্থার জন্য বা পরিষ্কারভাবে নামকরণ করা প্রকল্পে কাজ করছি
- প্রতি ডিরেক্টরি ডিরেক্টরি vimrc যা ফাইলটি খোলার সময় চেক করা হয় (নীচে দেখুন)। আর একটি মোটামুটি সহজ কার্যকর করার জন্য, বিশেষত যদি আপনার প্রকল্পের কোডটি এক জায়গায় থাকে।
শিরোনামের জন্য স্ক্যান করা হচ্ছে
অনেক সংস্থায়, প্রতিটি উত্স ফাইলের শীর্ষে একটি মানক শিরোনাম (একটি কপিরাইট নোটিশ এবং প্রকল্পের নাম ইত্যাদি সহ) থাকে। যদি এটি হয় তবে আপনি কোনও কীওয়ার্ডের সন্ধানে ফাইলের প্রথম (যেমন) 10 টি লাইন স্বয়ংক্রিয়ভাবে স্ক্যান করতে ভিমটি পেতে পারেন। এটি যদি এটি খুঁজে পায় তবে এটি আপনার সেটিংস পরিবর্তন করতে পারে। আমি যে ফর্মটি ব্যবহার করি (যা প্রচুর পরিমাণে অন্যান্য কাজ করে) এর চেয়ে সহজ করার জন্য আমি এটি পরিবর্তন করেছি, তবে একটি তৈরি করুন ~/.vim/after/filetype.vim
(যদি আপনার কাছে এখনও না থাকে) এবং এর মতো কিছু যুক্ত করুন:
au FileType * call <SID>ConfigureFiletypes(expand("<amatch>"))
" List of file types to customise
let s:GROUPNAMETypes = ['c', 'cpp', 'vhdl', 'c.doxygen']
func! <SID>CheckForGROUPNAMECode()
" Check if any of the first ten lines contain "GROUPNAME".
" Read the first ten lines into a variable
let header = getline(1)
for i in range(2, 10)
let header = header . getline(i)
endfor
if header =~ '\<GROUPNAME\>'
" Change the status line to make it clear which
" group we're using
setlocal statusline=%<%f\ (GROUPNAME)\ %h%m%r%=%-14.(%l,%c%V%)\ %P
" Do other customisation here
setlocal et
" etc
endif
endfunc
func! <SID>ConfigureFiletypes(filetype)
if index(s:GROUPNAMETypes, a:filetype) != -1
call <SID>CheckForGROUPNAMECode()
endif
endfunc
যখনই যে কোনও ধরণের ফাইল খোলা হয় এবং ফাইল প্রকার সেট করা হয় ( au FileType *
লাইন),ConfigureFiletypes
ফাংশনটি বলা হয়। বর্তমান গ্রুপ (GROUPNAME) এর সাথে যুক্ত ফাইল ধরণের তালিকায় ফাইল টাইপ রয়েছে কিনা তা এটি পরীক্ষা করে, এই ক্ষেত্রে 'সি', 'সিপিপি', 'ভিএইচডিএল' বা 'সি.ডক্সিজেন'। যদি এটি হয় তবে এটি চেকফোরগ্রোআরআউপিএম কোড () কল করে, যা ফাইলের প্রথম 10 টি লাইন পড়ে এবং যদি সেগুলিতে GROUPNAME থাকে তবে এটি কিছু কাস্টমাইজেশন করে। পাশাপাশি প্রসারিত ট্যাবগুলি বা যা কিছু সেট করার পাশাপাশি গ্রুপের নাম পরিষ্কারভাবে দেখানোর জন্য এটি স্ট্যাটাস বারকেও পরিবর্তন করে যাতে আপনি জানেন যে এটি এক নজরে কাজ করেছে।
খোলার সময় কনফিগারেশন পরীক্ষা করা হচ্ছে
অনেকটা জেএস ব্যাংসের পরামর্শের মতো, কাস্টম কনফিগারেশন ফাইল থাকা কার্যকর হতে পারে। তবে এটি ভিএমআরসি-তে লোড করার পরিবর্তে এর মতো কিছু বিবেচনা করুন, যা .c ফাইল হিসাবে একই ডিরেক্টরিতে .vim.custom জন্য একটি .c ফাইল খুলবে কিনা তা পরীক্ষা করবে।
au BufNewFile,BufRead *.c call CheckForCustomConfiguration()
function! CheckForCustomConfiguration()
" Check for .vim.custom in the directory containing the newly opened file
let custom_config_file = expand('%:p:h') . '/.vim.custom'
if filereadable(custom_config_file)
exe 'source' custom_config_file
endif
endfunction