การสร้างไวยากรณ์เน้นเป็นกลุ่มแบบง่าย


25

ฉันมีการจัดเรียงที่เรียบง่ายของแฟ้มฐานข้อมูลซึ่งประกอบด้วยเฉพาะของรายการในรูปแบบดังต่อไปนี้

ตัวแปร = ค่า

ฉันต้องการสร้างไวยากรณ์เสียงเรียกเข้าแบบง่าย ๆ ที่เน้นมันและตั้งเป็นนามสกุลไฟล์เฉพาะ

ตัวอย่างเช่นส่วนตัวแปรอาจเป็นสีฟ้าอ่อนและค่าส่วนแสงสีแดง

ฉัน googled มันและมาข้ามสิ่งต่างๆเช่น$vimruntime\syntax\, syntax set=, syntax matchและhiคำหลัก แต่ไม่สามารถตั้งค่าตัวเองในที่สุด

ดังนั้นฉันต้องการตัวอย่างโค้ดเสียงเรียกเข้าที่ง่ายมากที่จะรับรู้ได้โดยจับคู่ด้านซ้ายและด้านขวาแล้ววาดแยกต่างหาก

คำตอบ:


31

สมมติว่านามสกุลไฟล์ของคุณคือ*.foo...

  1. สร้างไฟล์และไดเรกทอรีเหล่านี้หากไม่มี:

    $HOME/.vim/ftdetect/foo.vim
    $HOME/.vim/syntax/foo.vim
    
  2. ใส่ต่อไปนี้ใน$HOME/.vim/ftdetect/foo.vim:

    autocmd BufRead,BufNewFile *.foo set filetype=foo
    
  3. ใส่ต่อไปนี้ใน$HOME/.vim/syntax/foo.vim:

    syntax match FooKey   /^[^=]\+/
    syntax match FooValue /[^=]\+$/
    
  4. วางบรรทัดต่อไปนี้ไว้ที่ท้ายสุดของ$HOME/.vimrc(หรืออย่างน้อยที่สุดหลังcolorschemeบรรทัดใด ๆ):

    highlight FooKey   ctermfg=cyan guifg=#00ffff
    highlight FooValue ctermfg=red  guifg=#ff0000
    
  5. ตรวจสอบให้แน่ใจว่าคุณมีบรรทัดต่อไปนี้ที่ใดที่หนึ่งใน~/.vimrc:

    syntax on
    

ว้าว OP มีวิธีแก้ปัญหาที่เหมือนกันสองอย่างสำหรับราคาหนึ่ง! ฉันชอบวิธีการแก้ปัญหาของเราทั้งสองที่คล้ายกันมาก แต่มีรายละเอียดที่แตกต่างกัน
Ingo Karkat

มันใช้งานได้ แต่ฉันต้องพิมพ์ftype=ทุกครั้งด้วยตนเองใน vim ไม่มีfdetectไดเรกทอรีใน$vimrnutime(ฉันอยู่บน windows %programfiles(x86)%\vim\vim74\ ) ฉันสร้างมันขึ้นมา แต่ก็ยังไม่ตอบสนอง

คุณต้องการsyntax onใน vimrc ของคุณ
romainl

20

สคริปต์ไวยากรณ์

สร้างไฟล์ที่~/.vim/syntax/simple.vimมีเนื้อหาดังต่อไปนี้:

" Quit when a syntax file was already loaded.
if exists('b:current_syntax') | finish|  endif

syntax match simpleVar "\k\+" nextgroup=simpleAssignment
syntax match simpleAssignment "=" contained nextgroup=simpleValue
syntax match simpleValue ".*" contained

hi def link simpleVar Identifier
hi def link simpleAssignment Statement
hi def link simpleValue String

let b:current_syntax = 'simple'

ที่ตรงกับองค์ประกอบไวยากรณ์ทั้งสามและให้สีเริ่มต้น โดยทั่วไปจะไม่มีการกำหนดสีที่ชัดเจน แต่จะเชื่อมโยงไปยังกลุ่มการเน้นสีที่เป็นค่าเริ่มต้นซึ่งกำหนดโดย colorcheme ของคุณ :hiคุณสามารถแสดงรายการทั้งหมดผ่าน สำหรับการปรับแต่งอ่าน:help :syntaxและ:help usr_44.txtดูสคริปต์ไวยากรณ์ที่มาพร้อมกับ Vim

การตรวจจับชนิดของไฟล์

จนถึงตอนนี้คุณต้อง:set syntax=simpleเปิดใช้งานด้วยตนเอง การทำเช่นนี้โดยอัตโนมัติคุณจะต้องสอนเป็นกลุ่มใหม่ของคุณเกี่ยวกับfiletype

สร้างไฟล์ที่~/.vim/ftdetect/simple.vimมีเนื้อหาดังต่อไปนี้:

autocmd BufNewFile,BufRead *.simple setf simple

สิ่งนี้จะถือว่าไฟล์นั้นสามารถระบุได้ผ่านชื่อไฟล์ (cp. :help autocmd-patterns) คุณยังสามารถตรวจจับตามพา ธ (ตำแหน่งไฟล์) หรือแม้กระทั่งเนื้อหา :help new-filetypeมีรายละเอียด

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