তবে .vimrc এ এই লাইনগুলি যুক্ত করার পরে, এটি কার্যকর হয়নি।
এর কারণ হ'ল 'syntax'বিকল্পটি সেট করার সময় ভিম বিদ্যমান সিনট্যাক্স আইটেমগুলি সাফ করে । এটি করা হয়েছে কারণ পুরানো সিনট্যাক্স আইটেমগুলি রাখা কিছু অদ্ভুত পরিস্থিতির দিকে নিয়ে যায়; আপনি একটি বাফার যা আছে syntax=fooএবং ব্যবহার set syntax=barতারপর আপনি একটি বাফার, যার জন্য হাইলাইট সিনট্যাক্স রয়েছে তার সাথে শেষ করব উভয় foo এবং bar।
যখন ভিম শুরু হয় এটি আপনার vimrcএকবারে (স্টার্টআপে) লোড করে, তবে প্রতিবার filetypeবা syntaxঅপশনগুলি সেট করা হলে এটি ফাইল টাইপ এবং সিনট্যাক্স ফাইলগুলি লোড করে , যা আপনার ভিআরসিআরটিতে সেট করা মানগুলি পুনরায় সেট করবে।
এমনকি এটি পুনরায় সেট না করা সত্ত্বেও, এটি কেবল আপনার ভিআরসিআরকে যুক্ত করা ভাল ধারণা হবে না, কারণ এটি কেবলমাত্র বাফার নয়, সমস্ত বাফারগুলিতে প্রয়োগ হয় syntax=c।
নীচের পাঠ্যটি ইউনিক্স-ওয়াই সিস্টেমে ভিমকে ধরে নিয়েছে, তবে এটি নিওভিম এবং উইন্ডোজ ব্যবহারকারীদের জন্যও কাজ করবে:
- নিওম ব্যবহারকারীদের
~/.vim/সাথে প্রতিস্থাপন করা উচিত ~/.config/nvim/।
- উইন্ডোজ ব্যবহারকারীদের
~/.vim/সাথে প্রতিস্থাপন করা উচিত %USERPROFILE%\vimfiles\।
একটি সম্পূর্ণ ফাইল ওভাররাইড করা
কোনও কিছুর পরিবর্তন করার সহজতম উপায় হ'ল এটির উপরের পরিবর্তন । এটি করতে একটি ফাইল তৈরি করুন ~/.vim/<file>.vim।
<file.vim>$VIMRUNTIME(সাব-ডিরেক্টরি সহ) সম্পর্কিত পাথ । আপনার উদাহরণে এটি হওয়া উচিত syntax/c.vim। এটি ফাইলের পরিবর্তে লোড হবে $VIMRUNTIME।
এর ফলশ্রুতিটি হল এটি পরিবর্তন করা সহজ - প্রস্থানিত সিনট্যাক্স ফাইল সংশোধন করা কিছু সময় কিছুটা জটিলও হতে পারে। খারাপ দিকটি হ'ল আপনি সিস্টেম-ওয়াইড ফাইলটিতে ভবিষ্যতের কোনও আপডেট পাবেন না।
আমি প্রায়শই সিনট্যাক্স ফাইলগুলির সাথে পরীক্ষার জন্য এটি একটি প্রাথমিক পয়েন্ট হিসাবে ব্যবহার করি এবং তারপরে নীচে বর্ণিত একটি পদ্ধতি ব্যবহার করে স্থানীয় সংযোজনে আমার স্থানীয় পরিবর্তনগুলি বের করে আনতে পারি।
স্থানীয় সংযোজন
সিনট্যাক্স ফাইলগুলিতে স্থানীয় সংযোজন যুক্ত করার দুটি উপায় রয়েছে, সেগুলি কার্যকরীভাবে অভিন্ন এবং আপনি যে পদ্ধতিটি পছন্দ করেন আপনি তা ব্যবহার করতে পারেন।
Syntax autocmd
Syntaxস্বতঃসিএমডি ব্যবহার করুন :
augroup ft_c
autocmd!
autocmd Syntax c syn match cFunction "\<[a-zA-Z_][a-zA-Z_0-9]*\>[^()]*)("me=e-2
autocmd Syntax c syn match cFunction "\<[a-zA-Z_][a-zA-Z_0-9]*\>\s*("me=e-1
autocmd Syntax c hi cFunction gui=NONE guifg=#B5A1FF
augroup end
নোট করুন যে কয়েকটি কমান্ডের সাথে শৃঙ্খলাবদ্ধ হওয়া |এখানে সমস্যাযুক্ত, কারণ তারা :synকমান্ডের অংশ হিসাবে ব্যাখ্যা করতে ঝোঁক, কারণ আমি autocmd Syntax cবেশ কয়েকবার পুনরাবৃত্তি করেছি । বিকল্প একটি ফাংশন ব্যবহার করা হবে:
fun s:c()
syn match cFunction "\<[a-zA-Z_][a-zA-Z_0-9]*\>[^()]*)("me=e-2
syn match cFunction "\<[a-zA-Z_][a-zA-Z_0-9]*\>\s*("me=e-1
hi cFunction gui=NONE guifg=#B5A1FF
endfun
augroup ft_c
autocmd!
autocmd Syntax c call s:c()
augroup end
সুবিধাটি হ'ল সমস্ত পরিবর্তনগুলি একটি একক ফাইলে অন্তর্ভুক্ত থাকতে পারে। অসুবিধাটি হ'ল এটি কিছুটা কুৎসিত, বিশেষত যদি আপনার অনেক পরিবর্তন হয়।
ডিরেক্টরি পরে
পরে ডিরেক্টরির ব্যবহার করুন: ~/.vim/after/<file>.vim।
এটি হ'ল পরে লোড হবে <file>.vim, যেখানে <file.vim>পাথ $VIMRUNTIME(সাব-ডিরেক্টরিগুলি সহ) সম্পর্কিত। আপনার উদাহরণে এটি হওয়া উচিত syntax/c.vim।
এছাড়াও দেখুন :help after-directory।
সুবিধাটি হ'ল এটি অটোকিমডির চেয়ে কিছুটা বেশি পঠনযোগ্য, বিশেষত যদি আপনার অনেক পরিবর্তন থাকে। অসুবিধাটি হ'ল আপনি যদি নিজের ভিম সেটআপটি বিভিন্ন মেশিনে মিরর করতে চান তবে আপনাকে একটি অতিরিক্ত ফাইলের অনুলিপি করতে হবে (এটি একটি গুরুত্বপূর্ণ কারণ যা অনেকে ভিম ফাইলগুলি গিটহাবের রেপোতে রাখে, তাই এটি সহজেই মেশিনে আয়নাঙ্কিত হতে পারে )।
~/.vim/after/syntax/c.vimপরিবর্তে এটি যুক্ত করার চেষ্টা করুন ।