เป็นกลุ่มวิธีการรีโหลดการเน้นไวยากรณ์


87

เมื่อฉันรัน Rmodel, Rcontroller และอื่น ๆ ใน Vim ฉันเห็น แต่ข้อความสีขาว แต่เมื่อฉันไปที่บัฟเฟอร์ถัดไปแล้วย้อนกลับไป:bnและ:blสีก็ใช้ได้

นี่คือโฟลเดอร์. vim ของฉัน https://github.com/regedarek/dotvim

คำตอบ:


97

ใช้ :syntax sync fromstart

ฉันได้รับคำแนะนำจากhttp://vim.wikia.com/wiki/Fix_syntax_highlighting

บทความนั้นยังแนะนำการสร้างการแมปสำหรับคำสั่งนั้นเช่นการแมป F12:

noremap <F12> <Esc>:syntax sync fromstart<CR>
inoremap <F12> <C-o>:syntax sync fromstart<CR>

วิธีนี้ใช้งานได้ แต่จะลบขีดเส้นใต้สำหรับการตรวจสอบการสะกด วิธีใดในการป้องกัน?
Alec Jacobson

1
ขออภัยฉันไม่ทราบ ฉันไม่ได้ตรวจการสะกดอะไรเลย อาจขึ้นอยู่กับส่วนเสริมเฉพาะของคุณ หากไม่มีใครตอบคำถามอาจคุ้มค่าที่จะเขียนคำถามพร้อมข้อมูลที่เกี่ยวข้อง
Mike Lippert

3
ฉันใช้autocmd BufEnter,InsertLeave * :syntax sync fromstartเพื่อบังคับให้ซิงค์ไวยากรณ์หลังจากที่ฉันป้อนบัฟเฟอร์ การซิงค์ไวยากรณ์จะถูกทริกเกอร์เมื่อมีInsertLeaveเหตุการณ์เกิดขึ้น
Samuel Li

วันหนึ่งอาจมีคนพบว่ามีประโยชน์ การใช้งานfiletype=shหรือสำหรับการทุบตีและชอบไม่syntax=sh bashเอาฉันมาคิดออกบ้าง
quapka

ฉันใช้การ:do Syntaxเทียบเท่า:doautocmd Syntaxซึ่งสั้นกว่าเพียงเล็กน้อยดังนั้นคุณจึงไม่ต้องผูกมัน (อย่างน้อยฉันก็ไม่ต้องเรียกคำสั่งนี้บ่อยๆดังนั้นฉันจึงพิมพ์มัน) ส่วนใหญ่ฉันใช้มันในบางไฟล์ที่มี regexes ซึ่งทำให้การเน้นไวยากรณ์แตกเมื่อฉันเปิดไฟล์ผ่าน netrw
Rens Tillmann

54

ลอง:

:e

หากคุณไม่มีการเปลี่ยนแปลงที่ยังไม่ได้บันทึกในไฟล์

หรือ:

:syn off | syn on

สร้างแผนที่เพื่อบรรเทาความเจ็บปวดเช่นnmap <F6> :Rmodel|e<CR>
holygeek

2
ดูเหมือนว่าควรมีคำสั่ง builtin เพื่อรีเฟรชการเน้นไวยากรณ์ อย่างอื่นที่ดูเหมือนจะใช้งานได้คือข้ามไปยังส่วนอื่นของไฟล์เช่นจุดเริ่มต้นหรือจุดสิ้นสุดและย้อนกลับเช่น:gg``
Keith Pinson

2
": syntax sync fromstart" (ไม่มีเครื่องหมายอัญประกาศ) ไม่ได้โหลดไวยากรณ์ของ filetype ซ้ำโดยเน้นที่ไฟล์ที่บางครั้งไม่แสดงสีของไวยากรณ์ซึ่งเป็นปัญหาต่อเนื่องสำหรับฉันและ Vim ด้วยเหตุผลบางประการ อย่างไรก็ตาม ": syn off | syn on" ทำงานทันที ": อี!" ก็จะทำการโหลดซ้ำได้เช่นกัน แต่ระวัง: การเปลี่ยนแปลงที่ไม่ได้บันทึกในไฟล์ของคุณจะหายไป!
Victoria Stuart

:syn off | syn onเปลี่ยนเฉดสีให้ฉันซึ่งน่ารำคาญ
naught101

12

พยายามทั้งหมดข้างต้น - ไม่มีอะไรได้ผลสำหรับฉัน

สิ่งเดียวที่ได้ผลคือ: :filetype detect ฉันจึงทำการรีแมปทางลัดด่วน :noremap <Leader>,ftd :filetype detect


9

บางครั้งไวยากรณ์ก็ใช้ได้ แต่สิ่งที่กำลังพังคือการพับ ในกรณีนั้นzxช่วยได้มาก

จากเอกสาร VIM:

zx

อัปเดตการพับ: ยกเลิกการพับที่เปิดและปิดด้วยตนเอง: ใช้ "พับระดับ" ซ้ำแล้วทำ "zv": ดูเส้นเคอร์เซอร์ ยังบังคับให้มีการคำนวณการพับซ้ำ สิ่งนี้มีประโยชน์เมื่อใช้ 'foldexpr' และบัฟเฟอร์มีการเปลี่ยนแปลงในลักษณะที่ส่งผลให้การพับไม่ได้รับการอัปเดตอย่างถูกต้อง


5

อีกทางเลือกหนึ่งคือ:

doautocmd Syntax

1
fwiw นี่เป็นคำตอบเดียวที่เน้นไวยากรณ์แบบคงที่เมื่อฉันมีปัญหานี้ ( syntax sync fromstartไม่ได้ทำอะไรเลยหรือทำอย่างอื่น!)
TJ Ellis

1
รุ่นที่สั้นกว่านี้จะเป็น:do Syntax
Rens Tillmann

-1

ลอง:

:Rrefresh!

คำสั่งนี้รีเฟรชการตั้งค่าแคชบางอย่างและโหลดrails.vimใหม่ด้วย
มันช่วยฉันรีเฟรชการเน้นไวยากรณ์ใน Rails


นี้เพียงนำไปใช้rails.vimและไม่ได้เป็นวิธีการแก้ปัญหาทั่วไป หากไม่มีปลั๊กอินนั้นคำสั่งนี้จะไม่มีอยู่
wchargin

-1

คุณยังสามารถลอง:

CTRL-L

จากเอกสาร VIM ( :h CTRL-L):

ล้างและวาดหน้าจอใหม่ การวาดใหม่อาจเกิดขึ้นในภายหลังหลังจากการประมวลผลประเภทหัว


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