ไวยากรณ์สีแบบผสมในกลุ่ม


12

ฉันมักจะเขียนเอกสารในknitrใช้เป็นกลุ่มซึ่งหมายความว่าฉันมีรหัส markdown ผสมกับรหัส R ฉันต้องการให้มีการระบายสีไวยากรณ์ R บนชิ้น R แต่ทำเครื่องหมายหรือไม่มีการระบายสีในส่วนอื่น ๆ ทั้งหมด เป็นไปได้หรือไม่ อย่างไร?


3
ฉันคิดว่าคุณทำได้ลองดูvim.wikia.com/wiki/…
nobe4

5
คุณอาจหรืออาจไม่สนับสนุนการกำหนดสีของ "บล็อกบล็อค" ทั้งนี้ขึ้นอยู่กับปลั๊กอินของคุณ ในกรณีแรกคุณจะ (เพียง) ต้องเปลี่ยนไวยากรณ์ของปลั๊กอินเพื่อให้รู้จัก "R chunks" ของคุณเป็นบล็อคโค้ดที่ถูกต้อง ในกรณีที่ 2 บางทีคุณสามารถสร้างแรงบันดาลใจให้ตัวเองจาก vimrc ของ Junegunn โดยเฉพาะฟังก์ชั่นs:syntax_includeและs:file_type_handler: github.com/junegunn/dotfiles/blob/master/vimrc
VanLaser

5
นี่เป็นไฟล์มาร์กอัปที่มีรหัส R อยู่ภายในบล็อคโค้ดหรือไม่ ถ้าเป็นเช่นนั้นคุณอาจต้องการเพิ่ม R g:markdown_fenced_languagesในvimrcตัวอย่างเช่นให้ g: markdown_fenced_languages ​​= ['r'] ` ฉันสมมติว่าคุณกำลังใช้ไวยากรณ์ markdown เริ่มต้นที่จัดทำโดย Tim Pope ข้อมูลเพิ่มเติมเกี่ยวกับภาษาที่ไม่เหมาะสม
Peter Rincker

1
ไฟล์ไวยากรณ์ของ Vim เหมือนกับส่วนใหญ่ใน Vim เพียงลำดับของคำสั่ง Ex ที่ใส่ไว้ในไฟล์ คุณสามารถรวมหนึ่งสองสามหรือมากที่สุดเท่าที่คุณต้องการ การสร้างไฟล์ไวยากรณ์ที่เน้นบางบล็อกเป็นภาษา A และบล็อกอื่น ๆ เนื่องจากภาษา B นั้นไม่ใช่เรื่องยาก (จริงๆแล้วฉันเพิ่งทำสิ่งนี้ในคำตอบอื่น ) อย่างไรก็ตามฉันไม่แน่ใจว่าเอกสาร "knitr" มีลักษณะอย่างไร นี่เป็นเพียงการลดราคาหรือไม่ หรือไวยากรณ์ที่แตกต่างกันอย่างไร
Martin Tournoij

คำตอบ:


2

ในฐานะที่เป็นบันทึกปีเตอร์ Rincker , markdown มาตรฐานที่เป็นกลุ่มของการจัดรูปแบบอยู่แล้วรวมถึงการสนับสนุนสำหรับไฮไลต์rรหัสภายใน "รั้วป้องกันรหัส" และเปิดใช้งานได้คุณก็ต้องตั้งค่าตัวแปรระดับโลกที่มีรหัสของคุณvimrc:

let g:markdown_fenced_languages = ['r']

อย่างไรก็ตามหลังจากทำเช่นนั้นคุณจะพบว่าบล็อกรหัส knitr ของคุณยังไม่ถูกเน้นสี

เพราะนี่คือ knitr ใช้ Pandoc ของการจัดรูปแบบของสตริงข้อมูลเพื่อรหัส R ความแตกต่างที่จะถูกเรียกใช้จากการป้องกันรหัสปกติและเป็นกลุ่มปกติ Markdown ไฮไลต์ไม่สนับสนุนนี้1

วิธีที่ง่ายที่สุดในการแก้ไขปัญหานี้คือการเพิ่มรายการไวยากรณ์เพิ่มเติมด้วยตนเองเพื่อจับคู่รหัสบล็อกประเภทนี้โดยเพิ่มบรรทัดต่อไปนี้ ~/.vim/after/syntax/markdown.vim

syntax region markdownHighlightr matchgroup=markdownCodeDelimiter start=/^\s*```{r}.*$/ end=/^\s*```\ze\s*$/ keepend contains=@markdownHighlightr

คุณสามารถลองติดตั้งปลั๊กอิน Vim สำหรับการเน้น Pandoc ซึ่งน่าจะสนับสนุนสิ่งนี้ได้ทันที

1: สิ่งนี้ไม่อาจถือได้ว่าเป็นปัญหาในไฟล์ไวยากรณ์ของ markdown ของ Vim ไวยากรณ์ Markdown เดิมไม่ได้รวมถึงการไม่พอใจบล็อกรหัสที่ทุกคนและCommonMark สเปคไม่ได้กำหนดวิธีการสตริงข้อมูลควรจัดรูปแบบ

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