python - تتضمن مشكلة استخدام مزامنة فيم ومزامنة المنطقة لتضمين تسليط الضوء على بناء الجملة




vim latex (2)

أحاول الحصول على فيم إلى بناء جملة تسليط الضوء على أي ملف ينتهي بتمديد .Rtex بالطريقة التالية:

  • يتم تمييز كل نص المستوى الأعلى كما تكس
  • استثناء: يتم تمييز أي نص مرفق في \begin{python}...\end{python} على أنه بيثون

أنا قادرة على تحقيق كل من هذه المعايير بشكل فردي، ولكن غير قادر على تحقيق كلا في وقت واحد. أعتقد أن تسليط الضوء على تكس إلى حد ما يتجاوز المناطق التي أبرزها بيثون، أو يمنعها من التأثير، وأنا عالقة في محاولة لمعرفة كيف.

الخطوة الأولى: تحرير .vimrc لإعطاء الملفات مع .Rtex ملحق نوع .Rtex :

  au BufRead *.Rtex setf rtex

الخطوة الثانية: إنشاء ~/.vim/syntax/rtex.vim . ومن محتويات هذا الملف الذي سيحدد كيفية تسليط الضوء على ملفات .Rtex .

الخطوة الثالثة: تمكين تسليط الضوء على المستوى العلوي العام تكس، من خلال جعل rtex.vim تبدو مثل هذا:

runtime! syntax/tex.vim

إذا فتحت ملف .Rtex الآن، يتم تمييز الملف بأكمله .Rtex ، بما في ذلك أي نص داخل \begin{python}...\end{python} .Rtex \begin{python}...\end{python} ، كما هو متوقع.

الخطوة الرابعة: اتبع التعليمات الواردة في فيم :help syn-include لتشمل بيثون تسليط الضوء وتطبيقه على جميع المناطق التي يحددها \begin{python} و \end{python} . rtex.vim ملف rtex.vim الآن كما يلي:

runtime! syntax/tex.vim
unlet! b:current_syntax
syntax include @Python syntax/python.vim
syntax region pythonCode start="\\begin{python}" end="\\end{python}" contains=@Python

unlet! b:current_syntax unlet! b:current_syntax يقصد الأمر unlet! b:current_syntax لإجبار ملف بناء python.vim لتنفيذ على الرغم من بناء جملة موجود (تكس) نشط بالفعل.

المشكلة: إذا قمت الآن بفتح ملف .Rtex ، لا يزال يتم تسليط الضوء على الملف بأكمله فقط باسم تكس. يبدو أن منطقة \begin{python}...\end{python} ليس لها أي تأثير.

التجربة: إذا قمت بإزالة أو تعليق runtime! الأمر، أنا لا تحصل على بيثون تسليط الضوء، ضمن \begin{python}...\end{python} المناطق بالضبط كما هو مطلوب، ولكن بالطبع لا تسليط الضوء تكس في ما تبقى من الوثيقة. لذلك أخلص إلى أن تسليط الضوء على تكس هو المسؤول عن منع مناطق الثعبان من أن تصبح نافذة المفعول.

يمكن للماجستير فيم تقدم لي أي اقتراحات؟ أنا حيرة حاليا. لقد نظرت في عدة صفحات وأسئلة ستاكوفيرفلو التي تبدو ذات صلة، ولكن أيا منها قد أدى حتى الآن إلى حل:


أنا لا أعرف ما إذا كان يساعد، ولكن الإختراق يمكنني استخدامها مع ملفات رنو التي تستخدم كل من تكس و رنويب الميزات هي على النحو التالي:

 au BufEnter *.Rnw set filetype=tex | set filetype=rnoweb 

هل تعمل نسخة معدلة في قضيتك؟


بعد بعض المزيد من الدراسة من الدليل، وأكثر من ذلك بكثير التجربة والخطأ، لقد أجاب أخيرا سؤالي الخاص (في وقت واحد محرجة والإنجاز سامية)، والتي أنا الآن الحفاظ هنا للأجيال القادمة.

في الأساس، وأعتقد أن المشكلة هي أن تسليط الضوء على الثعبان لن تصبح نافذة المفعول لأن المنطقة pythonCode كانت نفسها الواردة في منطقة أو تسليط الضوء على مجموعة محددة من قبل tex.vim ، لذلك لم يكن المستوى الأعلى. الحل هو أن include أيضا (بدلا من مجرد runtime ) tex.vim ، وإعطائها اسما مثل @TeX ، ومن ثم إضافة @TeX [email protected] إلى بلدي تعريف المنطقة بيثون. لذلك syntax/rtex.vim الآن يبدو مثل هذا:

let b:current_syntax = ''
unlet b:current_syntax
runtime! syntax/tex.vim

let b:current_syntax = ''
unlet b:current_syntax
syntax include @TeX syntax/tex.vim

let b:current_syntax = ''
unlet b:current_syntax
syntax include @Python syntax/python.vim
syntax region pythonCode matchgroup=Snip start="\\begin{python}" end="\\end{python}" containedin=@TeX contains=@Python

hi link Snip SpecialComment
let b:current_syntax = 'rtex'

وهذا يعمل! لست متأكدا مما إذا كانت جميع تلك unlet b:current_syntax الأوامر ضرورية للغاية. أعطيت أيضا منطقة بيثون يحد من مجموعة المباراة ( Snip ) بحيث يمكن تسليط الضوء على أنفسهم (مع لون خاص SpecialComment )، بدلا من اليسار فقط عادي، وهو ما يبدو على ما يبدو افتراضيا، لأنها لم تعد تعتبر جزءا من تكس .

الآن هو شيء تافهة لإضافة المزيد من المناطق تسليط الضوء على لغات مختلفة (على سبيل المثال، \begin{Scode}...\end{Scode} )، وهو أمر عظيم إذا كنت تحصل في البرمجة القراءة والكتابة - الدافع الأصلي لبلدي سؤال.

تحرير: هنا لقطة تظهر كيف يعمل مع بيثون ورمز رمز جزءا لا يتجزأ من وثيقة تكس:





tex