การเน้นไวยากรณ์ทำงานอย่างไรโดยย่อ:
ในsyntax/<filetype>.vim
กฎไวยากรณ์จะถูกกำหนดด้วย:syntax
คำสั่ง คำสั่งนี้นิยามไวยากรณ์ได้ดี มันบอกว่า "ถ้าข้อความตรงกับการแสดงออกปกตินี้มันเป็นสตริง" และอื่น ๆ ที่จะทำเช่นนั้นก็กำหนดกลุ่มไฮไลท์ มันไม่ได้พูดอะไรเกี่ยวกับสีเช่นนี้
:highlight
พูดว่า "เน้นกลุ่มนี้ด้วยสีเหล่านี้" สิ่งนี้ทำในโครงร่างสีไม่ใช่ไฟล์ไวยากรณ์ มีพวงของกลุ่ม Highlight เริ่มต้นคือ ( String
, Function
, Special
และอื่น ๆ ) ซึ่งทุกโทนสีที่ควรกำหนด
แม้ว่าคุณจะไม่ถูก จำกัด ให้ใช้กลุ่มเริ่มต้นเหล่านี้และคุณสามารถสร้างกลุ่มได้มากเท่าที่คุณต้องการ (แต่โดยทั่วไปไฟล์ไวยากรณ์เริ่มต้นจะไม่)
indent/<filetype>.vim
ไฟล์ควบคุมเยื้องอัตโนมัติ ตัวอย่างเช่นสำหรับ Ruby มันบอกว่า "สายหลังจากdef
ควรเพิ่มระดับการเยื้อง" และ "สายหลังจากend
ควรลดการเยื้องหนึ่งระดับ" มันไม่ได้ทำอะไรกับสีหรือการเน้นไวยากรณ์
เหตุใดภาษาการเขียนโปรแกรมที่แตกต่างกันจึงถูกเน้นให้แตกต่างกัน ส่วนหนึ่งเป็นเพราะความสวยงามส่วนบุคคลและความคิดเห็นของผู้ที่เขียนมัน ตัวอย่างเช่นใน Ruby Type
กลุ่มไฮไลต์ใช้สำหรับชื่อคลาส แต่มันอาจเป็นได้Function
หรืออย่างอื่น ทำไมถึงเป็นเช่นนั้นType
? อาจเป็นเพราะผู้เขียนคิดว่ามันดูดีขึ้นในโทนสีของเขาหรือเธอ
แต่ที่สำคัญกว่านั้นภาษามีความหมายและความรู้สึกที่แตกต่างกัน ใน Ruby self
เป็นคำหลักพิเศษ คุณไม่สามารถทำหรือself = "foo"
def self()
นี่คือข้อผิดพลาด แต่นี่ไม่ใช่ใน Python มันเป็นเพียงตัวแปรอีกตัวที่ไม่มีคุณสมบัติพิเศษ การทำ:
x = Object()
x.foo()
Python แปลว่า "จริงๆ" เป็น:
Object.foo(x)
ชื่อself
นี้เป็นแบบแผน (เกือบจะเป็นที่ยอมรับทั่วโลก) แต่คุณสามารถตั้งชื่อมันได้ตามที่คุณต้องการ def x(this):
หรือdef x(xxx):
ถูกต้องเท่าเทียมกัน คุณยังสามารถใช้ชื่อself
ได้ทุกที่ที่คุณต้องการ self = 'foo'
และdef self():
ดีอย่างสมบูรณ์
ฉันจะยืนยันว่าself
ไม่ควรเน้นเนื่องจากไม่ใช่คำหลักพิเศษหรือตัวแปรที่กำหนดไว้ล่วงหน้า (เช่นstr
) ไม่มีร่องรอยของคำself
ในไฟล์ไวยากรณ์ดังนั้นดูเหมือนว่าผู้เขียนจะให้เหตุผลเดียวกัน :-)
หากคุณต้องการself
เน้นคุณจะต้องสร้างกฎไวยากรณ์สำหรับมัน:
:syn keyword pythonBuiltin self
pythonBuiltin
ชื่อกลุ่มถูกกำหนดไว้แล้วในแฟ้มไวยากรณ์เริ่มต้นและเชื่อมโยงกับFunction
กลุ่มไฮไลท์ หากต้องการใช้กลุ่มไฮไลต์ใหม่ให้ใช้สิ่งที่ชอบ:
:syn keyword pythonSelf self
:highlight def link pythonSelf Special
หากต้องการทำการเปลี่ยนแปลงเหล่านี้คุณจะต้องไม่ติดในไฟล์ vimrc ของคุณ ไฟล์ไวยากรณ์จะแทนที่มัน แต่คุณจะต้องเรียกใช้หลังจากโหลดไฟล์ไวยากรณ์ซึ่งคุณสามารถทำได้สองวิธี:
ใช้FileType
autocmd:
augroup python
autocmd!
autocmd FileType python
\ syn keyword pythonSelf self
\ | highlight def link pythonSelf Special
augroup end
ใช้after-directory
, ~/.vim/after/syntax/python.vim
:
syn keyword pythonSelf self
highlight def link pythonSelf Special
ทั้งสองวิธีมีประสิทธิภาพเหมือนกัน ใช้ตามที่คุณต้องการ