তাই কিছুক্ষণ আগে আমি নিজের তৈরি করে ভিএম এর সিনট্যাক্স ফাইলগুলি কীভাবে কাজ করে সে সম্পর্কে আরও জানার সিদ্ধান্ত নিয়েছিলাম। আমার লক্ষ্যটি ছিল একটি সাধারণ সিনট্যাক্স ফাইল তৈরি করা যা ফাইলটিকে ডিলিমিটরের উপর ভিত্তি করে 3 ভাগে বিভক্ত করে এবং সেই তিনটি অংশের মধ্যে দুটির জন্য প্রাক-বিদ্যমান সিনট্যাক্স ফাইল অন্তর্ভুক্ত করে।
এটি একটি উদাহরণ ফাইল:
Some text, unstyled
==================== Log
(Output of git log)
==================== Diff
(Output of diff)
লক্ষ্যটি ছিল দুটি হেডার বাদ দিয়ে কেবল লগতে git.vim
এবং diff.vim
কেবলমাত্র ডিফের জন্য প্রয়োগ করা । 1 আমার সিনট্যাক্স ফাইলটি এমনভাবে দেখা শেষ হয়েছিল:
if exists("b:current_syntax")
finish
endif
syntax include @gitlog $VIMRUNTIME/syntax/git.vim
syntax region GitLog
\ start=/^===* Log/
\ end=/^===* Diff/
\ contains=@gitlog
syntax include @gitdiff $VIMRUNTIME/syntax/diff.vim
syntax region Diff
\ start=/^===* Diff/
\ end=/\n\n/
\ contains=@gitdiff
let b:current_syntax = "logdiff"
end
প্রথম অঞ্চলে কীভাবে start
দ্বিতীয় অঞ্চলের মতো একই তা লক্ষ্য করুন । এটি কাজ করে না; দ্বিতীয় অঞ্চলটি দৃশ্যত সনাক্ত করা যায় নি এবং সিনট্যাক্স হাইলাইটিং প্রয়োগ করা হয়নি।
আমি Regex স্খলন দ্বারা এটি কাজ করতে পারে end=/^===/
এবং start=/=== Diff/
যাতে অঞ্চলে স্পর্শ করবে না, কিন্তু বিশেষ করে যে মত করবেন না - এটি কম আবশ্যিক যে এক কোথা থেকে শুরু করার জন্য অন্য প্রান্ত অনুমিত হয় না।
দুটি অঞ্চলের সংজ্ঞা একই অক্ষরগুলিকে স্পর্শ করার অনুমতি দেওয়ার কোনও উপায় আছে (এবং / অথবা সমেতের পরিবর্তে ম্যাচিং এজগুলি একচেটিয়া করে তুলুন) অথবা আমি লুজ রেজেক্সের সাথে আটকে আছি?
1 (হ্যাঁ, আমি জানি git.vim
অন্তর্ভুক্ত diff.vim
, তবে এটি ছিল একটি শেখার অনুশীলন)
:h :syn-pattern-offset
) তৈরির জন্য "অঞ্চল শেষ" অফসেট ব্যবহার করে বা ফাইলের শেষ প্রান্তে গিটলগ অঞ্চল পরিবর্তন করে এবং ডিফ অঞ্চলটি সম্পূর্ণরূপে গিটলগ অঞ্চলে থাকতে পারে । যদিও আমি এই পদ্ধতির কোনওটিই কাজ করতে পারি না।