การแก้ไขไฟล์เน้นไวยากรณ์ gedit


9

ฉันกำลังพยายามเปลี่ยนไฟล์ไฮไลต์จาก Gedit ฉันได้แก้ไขไฟล์ /usr/share/gtksourceview-3.0/language-specs/fortran.lang เพราะฉันต้องการเปลี่ยนเคสที่ตัวแก้ไขใช้คำสั่งเป็นความคิดเห็น ปัญหาที่ฉันมีคือเมื่อฉันเลือกรูปแบบไฮไลต์ใหม่ไม่มีอะไรเน้นมันก็ยังคงเป็นข้อความธรรมดา

ไฟล์ fortran.lang เปิดขึ้นพร้อมสิทธิ์ su และฉันเพิ่งคัดลอกทุกอย่างลงในไฟล์ Gedit ใหม่และบันทึกในภายหลังเป็น fortran_enhanced.lang ในโฟลเดอร์เดียวกัน การเปลี่ยนแปลงที่ฉันทำกับไฟล์ต้นฉบับคือ:

ไฟล์ fortran.lang ดั้งเดิม:

<language id="fortran" _name="Fortran 95" version="2.0" _section="Sources">
  <metadata>
    <property name="mimetypes">text/x-fortran</property>
    <property name="globs">*.f;*.f90;*.f95;*.for</property>
    <property name="line-comment-start">!</property>
  </metadata>
  <styles>
    <style id="comment" _name="Comment" map-to="def:comment"/>
    <style id="floating-point" _name="Floating Point" map-to="def:floating-point"/>
    <style id="keyword" _name="Keyword" map-to="def:keyword"/>
    <style id="intrinsic" _name="Intrinsic function" map-to="def:builtin"/>
    <style id="boz-literal" _name="BOZ Literal" map-to="def:base-n-integer"/>
    <style id="decimal" _name="Decimal" map-to="def:decimal"/>
    <style id="type" _name="Data Type" map-to="def:type"/>
  </styles>
  <default-regex-options case-sensitive="false"/>
  <definitions>
    <!-- Note: contains an hack to avoid considering ^COMMON a comment -->
    <context id="line-comment" style-ref="comment" end-at-line-end="true" class="comment" class-disabled="no-spell-check">
      <start>!|(^[Cc](\b|[^OoAaYy]))</start>
      <include>
        <context ref="def:escape"/>
        <context ref="def:in-line-comment"/>
      </include>
    </context>
(...)

ไฟล์ fortran_enhanced.lang ที่แก้ไขแล้ว:

                     <!-- Note: changed language id and name -->
<language id="fortran_enhanced" _name="Fortran 95 2.0" version="2.0" _section="Sources">
  <metadata>
    <property name="mimetypes">text/x-fortran</property>
                     <!-- Note: removed *.f and *.for from file extensions -->
    <property name="globs">*.f90;*.f95;</property>
    <property name="line-comment-start">!</property>
  </metadata>
  <styles>
    <style id="comment" _name="Comment" map-to="def:comment"/>
    <style id="floating-point" _name="Floating Point" map-to="def:floating-point"/>
    <style id="keyword" _name="Keyword" map-to="def:keyword"/>
    <style id="intrinsic" _name="Intrinsic function" map-to="def:builtin"/>
    <style id="boz-literal" _name="BOZ Literal" map-to="def:base-n-integer"/>
    <style id="decimal" _name="Decimal" map-to="def:decimal"/>
    <style id="type" _name="Data Type" map-to="def:type"/>
  </styles>
  <default-regex-options case-sensitive="false"/>
  <definitions>
                     <!-- Note: I want comments only beginning with !, not C -->
    <context id="line-comment" style-ref="comment" end-at-line-end="true" class="comment" class-disabled="no-spell-check">
      <start>!</start>
      <include>
        <context ref="def:escape"/>
        <context ref="def:in-line-comment"/>
      </include>
    </context>
(...)

ฉันได้อ่านคำถามนี้ [ เน้น gedit กำหนดเองเน้นไวยากรณ์สำหรับ Dummies? ] และฉันพยายามทำให้ไฟล์ fortran_enhanced.lang ใหม่อ่านได้ด้วย

$ cd /usr/share/gtksourceview-3.0/language-specs
$ sudo chmod 0644 fortran_enhanced.lang

แต่มันก็ไม่ได้สร้างความแตกต่าง

ฉันต้องบอกว่าฉันไม่เคยทำอะไรแบบนี้มาก่อนและฉันก็ไม่เข้าใจไฟล์ภาษาส่วนใหญ่ดังนั้นฉันจึงเปิดให้มีการวิพากษ์วิจารณ์ทุกครั้ง

ขอบคุณล่วงหน้า!


cd /usr/share/gtksourceview-3.0/language-specsลงที่ด้านล่างของโพสต์ที่คุณกล่าวว่า นั่นคือคำสั่งจริงที่คุณรันหรือไม่? /usr/local/share/gtksourceview-3.0/language-specsหากเป็นเช่นนั้นคุณก็ต้องย้ายไฟล์ไปที่
evan.bovie

@ emb1995 ฉันได้คัดลอกโฟลเดอร์ gtksourceview-3.0 ไปยัง / usr / local / share ตามที่คุณแนะนำ (ฉันบอกว่าคัดลอกเพราะโฟลเดอร์นั้นอยู่ใน / usr / share / ในคอมพิวเตอร์ของฉัน) อย่างไรก็ตามดูเหมือนว่าจะไม่ได้ผลสำหรับฉันฉันยังคงได้รับข้อความธรรมดาเมื่อเลือกไฟล์ไฮไลต์ใหม่เป็น gedit :(
Oscar Saleta Reig

คำตอบ:


4

ฉันคิดว่าฉันพบสิ่งที่ผิดพลาดสำหรับคุณ:

สารละลาย

เป็นเรื่องที่ดีและถูกต้องที่คุณเปลี่ยนid(และ_name) ใน<language ...>แท็ก หลังจากทั้งหมดมันเป็นรูปแบบการเน้นใหม่ที่คุณสร้าง

อย่างไรก็ตามคุณต้องเปลี่ยนตำแหน่งอื่นในไฟล์ที่ใช้รหัสนี้ เพิ่มเติมลงไปในคำจำกัดความภาษา (ละเว้นคำพูดในคำถาม) คุณพบสิ่งนี้:

<context id="fortran" class="no-spell-check">

เห็นได้ชัดว่าคุณต้องมีบริบทที่มี ID เดียวกันกับภาษาของคุณรวมถึง / อ้างอิงคำจำกัดความบริบทที่ใช้ทั้งหมดเพื่อให้ gedit / GtkSourceView ใช้เมื่อมีการเลือกรูปแบบเฉพาะ

ฉันพบมันได้อย่างไร

ฉันไม่ได้เป็นผู้เชี่ยวชาญในเรื่องนี้ คุณสมบัติทั้งหมดของฉันคือฉันเคยเห็นไฟล์ XML มาก่อน;) ดังนั้นฉันจึงสามารถคาดเดา "การศึกษา" ได้เท่านั้น

สิ่งที่ทำให้ฉันปิดเป็นคำเตือนที่แสดงเมื่อเริ่มต้น gedit จากหน้าต่างเทอร์มินัล

(gedit: 6786): GtkSourceView-WARNING **: ล้มเหลวในการโหลด '/usr/local/share/gtksourceview-3.0/language-specs/frtrn.lang': การขาดภาษาหลัก (id = "frtrn")

(ฉันใช้ " frtrn " เป็น id ชื่อและนามสกุลไฟล์ขณะทดสอบคุณควรได้รับคำเตือนแบบเดียวกันกับ " fortran_enhanced ")

นี่ทำให้ฉันสงสัยมากพอที่จะค้นหา ID ต้นฉบับในไฟล์ที่เหลือ หลังจากลองใช้วิธีแก้ปัญหาข้างต้นฉันก็พบบรรทัดต่อไปนี้เพื่อรองรับคำอธิบายของฉัน:

[คำจำกัดความ] ที่นี่เราควรกำหนดบริบทหลักหนึ่งที่เราป้อนที่จุดเริ่มต้นของไฟล์: เพื่อให้เราใช้แท็กที่มี ID เท่ากับ ID ขององค์ประกอบ [... ]

มันมาจากการสอนไฟล์คำจำกัดความภาษาในเอกสาร GtkSourceView

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.