การเน้นไวยากรณ์ทำงานอย่างไรโดยย่อ:
ใน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 ของคุณ ไฟล์ไวยากรณ์จะแทนที่มัน แต่คุณจะต้องเรียกใช้หลังจากโหลดไฟล์ไวยากรณ์ซึ่งคุณสามารถทำได้สองวิธี:
ใช้FileTypeautocmd:
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
ทั้งสองวิธีมีประสิทธิภาพเหมือนกัน ใช้ตามที่คุณต้องการ