আমি কীভাবে একটি বংশের ভিতরে ভাষা-নির্দিষ্ট সিনট্যাক্স সক্ষম করব?


19

আমি যখন কোনও পিএইচপি ফাইল সম্পাদনা করি এবং আমি একটি হেরডোকটিতে একটি স্ট্রিং সংজ্ঞায়িত করি তখন জাভাস্ক্রিপ্ট সিনট্যাক্স বা এইচটিএমএল সিনট্যাক্স বা এসকিউএল সিন্ট্যাক্স হ'লে সিন্ট্যাক্স হাইলাইটিং হেরেডকের অভ্যন্তরে সক্ষম হবে। তবে এটি সিএসএস সিনট্যাক্সের জন্য কাজ করবে না।

উদাহরণ (যদি আমরা hello.phpনিম্নলিখিত কোড সহ নতুন একটি পিএইচপি ফাইল তৈরি করি ):

<?php
$foo = <<<"JAVASCRIPT"
var hello = "hello";
JAVASCRIPT;

$bar = <<<"CSS"
/* This code below should be syntax-highlighted. */
.hello {
  font-weight: bold;
}
CSS;

JAVASCRIPTব্লক সঠিকভাবে তুলে ধরা হয়, কিন্তু CSSব্লক নয়। এছাড়াও, যদি আমি চালানোর SynStackউপর varজাভাস্ক্রিপ্ট কোড ব্লকে কীওয়ার্ডটি আমি পেতে ['phpRegion', 'phpHereDoc', 'javaScriptIdentifier'], কিন্তু যদি আমি সিএসএস ব্লক যে কোন জায়গা একই কাজ, আমি শুধুমাত্র পেতে ['phpRegion', 'phpHereDoc'], তাই আমি কিছু সিএসএস সিনট্যাক্স নিয়ম হাইলাইট যোগ করতে হবে। এই বাক্য গঠন নিয়মগুলি কোথায় সংজ্ঞায়িত হচ্ছে এবং আমি কীভাবে এগুলিতে যুক্ত করব?


1
দ্রষ্টব্য: // This should be syntax-highlightedএকটি কার্যকর সিএসএস মন্তব্য নয়, এবং তাই সিনট্যাক্সটি মন্তব্য ছাড়া অন্য কিছু হিসাবে হাইলাইট হওয়া উচিত। সিএসএস কেবল /* */বহু-লাইন মন্তব্যগুলিকে সমর্থন করে । //আপনি যদি সাস বা স্টাইলাসের মতো প্রিপ্রসেসর ভাষা ব্যবহার করেন তবে একক-লাইন মন্তব্যগুলি সমর্থন করা হয়।
ররি ও'কেনে

আপনি সঠিক. আমি সেই পরিবর্তনটি প্রতিবিম্বিত করতে কোডটি আপডেট করেছি।
মিঃস্নরব

আমিও সিএসএস হেরেডোক সিনট্যাক্স হাইলাইট করার জন্য একটি সমাধান পেতে চাই। আমি অনেক পরিস্থিতিতে চেষ্টা করেছি কিন্তু এটি কাজ করতে পারেনি। কারও সমাধান আছে?
কেন

উত্তর:


3

টি এল; ডিআর:

এটি ভিমের পিএইচপি এবং এইচটিএমএল সিন্ট্যাক্স ফাইলগুলিতে সংজ্ঞায়িত করা হয়েছে। সিএসএসের জন্য কীভাবে বিধি যুক্ত করতে হয় তা দেখতে বিভাগে ঝাঁপুন এবং আমি কীভাবে এগুলিতে যুক্ত করব? নীচে, বা এটি কীভাবে কাজ করে তার ব্যাখ্যার জন্য পড়ুন।

এই সিনট্যাক্স বিধিগুলি কোথায় সংজ্ঞায়িত হচ্ছে?

জাভাস্ক্রিপ্ট হেরেডোকটি ভিমের সিনট্যাক্স contains1 বৈশিষ্ট্যটি ব্যবহার করে হাইলাইট করা হয়েছে যা সিনট্যাক্স গোষ্ঠীগুলিকে অন্যান্য সিনট্যাক্স গ্রুপ ধারণ করতে দেয় contain

এটি কোথায় সংজ্ঞায়িত হয়েছে তা সন্ধান করতে প্রথমে পিএইচপি-র জন্য সিনট্যাক্স হাইলাইটিং ফাইলটি খুলুন:

:e $VIMRUNTIME/syntax/php.vim

এখন সম্ভবত সম্ভবত সিনট্যাক্স ফাইলটি "জাভাস্ক্রিপ্ট" স্ট্রিংয়ের একটি ম্যাচের উপর ভিত্তি করে জাভাস্ক্রিপ্ট হেরেডোকটি সন্ধান করছে, সুতরাং এটির জন্য অনুসন্ধান করা যাক:

/javascript

তৃতীয় ম্যাচটি এই মন্তব্য:

" including HTML,JavaScript,SQL even if not enabled via options

প্রতিশ্রুতিবদ্ধ মনে হচ্ছে! প্রাসঙ্গিক বাক্য গঠন রেখাটি একবার দেখে নেওয়া যাক:

syn region  phpHereDoc  matchgroup=Delimiter
\ start="\(<<<\)\@<=\(\"\=\)\z(\(\I\i*\)\=\(javascript\)\c\(\i*\)\)\2$"
\ end="^\z1\(;\=$\)\@="
\ contained
\ contains=@htmlJavascript,phpIdentifierSimply,phpIdentifier,phpIdentifierComplex,phpBackslashSequences,phpMethodsVar,@Spell
\ keepend extend

( সহজ পড়ার জন্য লাইন ধারাবাহিকতা যুক্ত করা হয়েছে )

ঠিক আছে, সুতরাং এই সিনট্যাক্স অঞ্চলটি জাভাস্ক্রিপ্ট হেরেডোককে একটি সংশ্লেষিত নিয়মিত অভিব্যক্তির সাহায্যে খুঁজে পায় এবং যুক্তির মধ্যে @htmlJavascriptসিনট্যাক্স cluster2 যুক্ত করে জাভাস্ক্রিপ্টটিকে অঞ্চলটির মধ্যে হাইলাইট করার অনুমতি দেয় contains

তবে সিএসএস হেরডোকসের সাথে সম্পর্কিত কোনও সংজ্ঞা নেই! একটি যোগ করতে দেয়। সুতরাং পরিবর্তন করার প্রথম জিনিসটি হ'ল startনিয়মিত প্রকাশ। কেবলমাত্র পরিবর্তন javascriptমধ্যে css:

start="\(<<<\)\@<=\(\"\=\)\z(\(\I\i*\)\=\(css\)\c\(\i*\)\)\2$"

এটা সহজ!

তবে আমরা জাভাস্ক্রিপ্টটি আমাদের সিএসএস হেরডোকটিতে হাইলাইট করতে চাই না। সুতরাং আমাদের @htmlJavascriptসিএসএস সমতুল্যতেও পরিবর্তন করতে হবে। কিন্ত হয় সিএসএস সমতুল্য? (আপনি অনুমান করতে সক্ষম হতে পারেন, তবে আসুন নিশ্চিত হওয়ার জন্য গতিগুলি অনুসরণ করুন))

এটি কোথায় সংজ্ঞায়িত হয়েছে তা দেখতে htmljavascript3 টি অনুসন্ধান করতে দেয় :

/htmljavascript

হুম। অন্য কোনও ফলাফল নেই। এটি অন্য কোথাও সংজ্ঞায়িত করা উচিত! আসুন আমরা ফাইলের শীর্ষে এক ঝলক দেখে নিই যে আমাদের কোনও অন্তর্ভুক্ত রয়েছে তা খুঁজে পেতে পারে:

runtime! syntax/html.vim

দেখে মনে হচ্ছে এটি 4 হতে পারে ।

:e $VIMRUNTIME/syntax/html.vim

এই ফাইলটিতে আবার অনুসন্ধান চালান, এবং আমরা এই লাইনটি 5 পেয়েছি :

syn cluster htmlJavaScript      add=@htmlPreproc

সুতরাং এইচটিএমএল জাভা স্ক্রিপ্ট একটি cluster, সংজ্ঞায়িত html.vim। সিএসএসের জন্য কি আমরা ব্যবহার করতে পারি তেমন কোনও ক্লাস্টার রয়েছে?

/htmlcss

হা!

syn include @htmlCss syntax/css.vim

তাই আমরা ঠিক প্রতিস্থাপন করা প্রয়োজন @htmlJavascriptসঙ্গে @htmlCsscontainsযুক্তি:

contains=@htmlCss,phpIdentifierSimply,phpIdentifier,[...]

এবং আমি কীভাবে তাদের সাথে যুক্ত করব?

ফাইলের নীচে পুরো সিনট্যাক্স কমান্ডটি সংরক্ষণ করুন ~/after/syntax/php.vimযাতে এটি পিএইচপি বাকী বাক্য সিনট্যাক্স প্রসেসিংয়ের পরে চালিত হয় এবং আপনি শেষ করেছেন!

syn region  phpHereDoc  matchgroup=Delimiter
\ start="\(<<<\)\@<=\(\"\=\)\z(\(\I\i*\)\=\(css\)\c\(\i*\)\)\2$"
\ end="^\z1\(;\=$\)\@="
\ contained
\ contains=@htmlCss,phpIdentifierSimply,phpIdentifier,phpIdentifierComplex,phpBackslashSequences,phpMethodsVar,@Spell
\ keepend extend

1: :help :syn-containsবিশদ জন্য দেখুন।
2: দেখুন :help :syn-cluster
3: আমি 'ignorecase'চালু আছে। এটি ছাড়াই, আপনাকে 4 htmlJavascriptবা সন্ধান করতে হবে \chtmljavascript
: আসলে, ভিম সিনট্যাক্স ফাইলগুলিতে ব্যবহৃত নামকরণ স্কিমের উপর ভিত্তি করে, আমরা সম্ভবত htmlJavascriptএকা নামের উপর ভিত্তি করে এটি সন্ধান করতে পারতাম ।
5: "জাভাস্ক্রিপ্ট" দিয়ে আলাদাভাবে মূলধন হয়েছে, এবার। ভাগ্যবান আমরা 'ignorecase'সুইচ চালু করেছি , তাই না?

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.