การเน้นเป็นกลุ่มสำหรับไฟล์บางประเภท (ตำแหน่งที่จะวางไฟล์ไวยากรณ์, เหตุการณ์ vim, บรรทัดที่จะใส่ใน vimrc)


17

ฉันได้กำหนดเวลาไฟล์jak.vimเพื่อเสนอการเน้นที่กำหนดเองเมื่อฉันจดบันทึกอย่างไรก็ตามมันจะถูกนำไปใช้กับไฟล์บางไฟล์ที่ไม่มี.jakนามสกุล ไฟล์ชื่อprogress.jlogโดยเฉพาะ เพียงเพื่อทดสอบว่าเป็นปัญหาที่เฉพาะเจาะจงเพื่อขยายว่าผมเปลี่ยนprogress.jlogไปprogress(นามสกุลไม่ได้) แต่ประสบปัญหาเดียวกัน

ฉันทำอะไรลงไป:

  • ฉันสร้างjak.vimในไดเรกทอรี~/.vim/ftdetect
  • ฉันเพิ่มบรรทัดนี้: "au BufRead, BufNewFile * .jak set filetype = jak" ไปด้านบนตามที่อธิบายไว้ในการอ้างอิงเสียงเรียกเข้า
  • ฉันเริ่มใหม่เป็นกลุ่ม (: x แล้วเปิดใหม่)

นี่คือ~/.vim/ftdetect/jak.vimหน้าตาของฉัน:

~/.vim/ftdetect][505]% cat jak.vim
au BufRead, BufNewFile *.jak set filetype=jak

syn region JakeSubtitle start=+==+ end=+==+
highlight JakeSubtitle ctermbg=black ctermfg=DarkMagenta

syn region JakeTitle start=+===+ end=+===+
highlight JakeTitle ctermbg=black ctermfg=yellow

syn region JakeMasterTitle start=+====+ end=+====+
highlight JakeMasterTitle cterm=bold term=bold ctermbg=black ctermfg=LightBlue

syn region emphasis start=+<em>+ end=+</em>+
highlight emphasis ctermbg=black ctermfg=yellow

" makes all of the numbered items bold."
" (this works I just don't like the effect.  Decided to change to just highlight the "number)
"syn region numberedItem start=+^\t*\d*)+ end=+\n+"
syn match numberedItem +^\t*\d*)+
highlight numberedItem cterm=bold

และในกรณีที่คุณต้องรู้ว่านี่คือสิ่งที่ฉัน.vimrcมอง:

~/.vim/ftdetect][508]% cat ../../.vimrc
"on will override defaults set.  Enable will allow you to set defaults."
" also turns on filetype"
"syntax on"
syntax enable

set nocompatible

" ???"
set backspace=2

"Auto indent"
set ai

"Map jj to Esc so that you do not have to reach for the Esc button"
imap jj <Esc>

"do not allow the search to wrap around the screen, must stop at the bottom."
set nowrapscan

"when doing a search highlight all occurances"
":set hlsearch"

"stop text from wrapping on the screen"
set nowrap

"turn the mouse on while in insert mode"
set mouse=i

"attempting to highlight specific keywords so it is easy to see in code."
"see help e410 for more info."
"see this post I created: /superuser/110054/custom-vim-highlighting"
"Legal colors: Black, DarkBlue, DarkGreen, DarkCyan, DarkRed, DarkMagenta,"
"Brown, DarkYellow, LightGray, LightGrey, Gray, Grey, DarkGray, DarkGrey,"
"Blue, LightBlue, Green, LightGreen, Cyan, LightCyan, Red, LightRed, Magenta,"
"LightMagenta, Yellow, LightYellow, White"
syn keyword JakeKeywords        Question TODO Answer JAKEHTTPS PossibleProblem
highlight JakeKeywords cterm=bold term=bold ctermbg=black ctermfg=Blue


"for case-insensitve searches"
set ignorecase

"Override the 'ignorecase' option if the search pattern contains upper"
"case characters.  Only used when the search pattern is typed and"
"'ignorecase' option is on."
set smartcase


"use indents as the folding method"
set foldmethod=indent

"make vim save and load the folding of the document each time it loads"
"also places the cursor in the last place that it was left."
au BufWinLeave * mkview
au BufWinEnter * silent loadview

หมายเหตุ: ฉันใส่เครื่องหมายคำพูด (ความคิดเห็น) ทั้งหมดเพื่อให้อ่านง่ายขึ้น


ปรับปรุง

ฉันพบโพสต์ของ nsharishเป็นประโยชน์อย่างมาก พวกเขาแนะนำให้ฉันเพิ่มสิ่งนี้ลงใน vimrc ของฉัน:

au BufRead,BufNewFile *.jak set filetype=jak

และเพิ่มjak.vimไฟล์ของฉันไปที่~/.vim/syntax

น่าเสียดายที่รหัสขัดแย้งกับสองบรรทัดนี้ (ใน vimrc ของฉัน)

au BufWinLeave *.c mkview
au BufWinEnter *.c silent loadview

ฉันใช้ทั้งสองนี้เพื่อบันทึกการพับตำแหน่งเคอร์เซอร์ของฉัน ฯลฯ เมื่อโหลดกลุ่ม (ดู:help lo) หากฉันแสดงความคิดเห็นทั้งสองบรรทัดข้อเสนอแนะของ nsharish ทำงานเหมือนมีเสน่ห์ ด้วยสองบรรทัดนี้ไม่มีการเน้นในไฟล์ใด ๆ ของฉัน

ข้อสรุป

ฉันทำเครื่องหมายคำตอบของ nsharish เป็นคำตอบที่ดีที่สุด (เพราะเป็นประโยชน์กับฉันมากที่สุด) อย่างไรก็ตามนี่คือวิธีที่ฉันแก้ไขปัญหา:

Nsharish ถูกต้องฉันต้องการบรรทัดนี้ใน.vimrc:

syntax enable
au BufRead,BufNewFile *.jak set filetype=jak

และฉันต้องการที่จะย้ายของฉันไฟล์ jak.vim~/.vim/syntax

อย่างไรก็ตามตามที่ระบุไว้ข้างต้นมีข้อขัดแย้งกับบรรทัดเหล่านี้:

au BufWinLeave * mkview
au BufWinEnter * silent loadview

เมื่อบรรทัดเหล่านี้ถูกคอมเม้นท์การเน้นสีใช้งานได้

สิ่งที่ฉันต้องทำคือเปลี่ยนสิ่ง...set filetype...นี้:

au BufWinEnter,BufRead,BufNewFile *.jak set filetype=jak

ฉันคิดว่า BufWinEnter ถูกเรียกหลังจากไฟล์ BufRead / BufNew ดังนั้นการไฮไลต์จะถูกเขียนทับโดยการจัดรูปแบบที่บันทึกไว้จากครั้งที่แล้ว

ขอขอบคุณอีกครั้งที่ nsharish ที่ช่วยฉันแก้ปัญหานี้


1
คำสั่ง * .c ขัดแย้งกับคำสั่ง * .jak ในแง่ใด
akira

คำตอบ:


10

คุณลองสิ่งนี้ ..

  • วาง jak.vim ของคุณในโฟลเดอร์. vim / syntax
  • ใส่บรรทัดต่อไปนี้เฉพาะในไฟล์. vimrc ของคุณ
ไวยากรณ์เปิดใช้งาน
au BufRead, BufNewFile * .jak set filetype = jak
ฉันลองสิ่งนี้กับไฟล์ jak.vim ของคุณ .... มันใช้ได้ดีสำหรับฉัน ....
ฉันใช้ vim7.2 ...
แก้ไข:
ลองนี่
ฉันมีปัญหาเดียวกันกับสาย mkview และ loadview ... เพียงแค่ตั้งประเภทไฟล์หนึ่งครั้งในไฟล์และมันจะถูกเก็บไว้แล้ว

เปิดไฟล์จากนั้นทำ " : set ft = jak " บันทึกไฟล์และออกจากกลุ่ม ... ตอนนี้เปิดไฟล์อีกครั้ง ... การเน้นไวยากรณ์ควรทำงานได้ในขณะนี้ ...
mkviewและloadviewดูเหมือนจะบันทึกการตั้งค่าไฮไลต์ไวยากรณ์ล่าสุด ยัง ....


พยายามตอนนี้ ... แต่คุณรู้ไหมว่า. vim / ftdetect / folder ทำอะไร? พฤติกรรมที่ฉันพบคือไฟล์ที่มีการจัดรูปแบบใด ๆ ที่ใช้กับไฟล์ทุกประเภท
sixtyfootersdude

อืมนั่นทำงานได้บางส่วน .. แต่ก็มีข้อขัดแย้งกับอีกสองบรรทัดใน vimrc ของฉัน ดูการปรับปรุงของฉัน
sixtyfootersdude

2

ฉันต้องยอมรับว่าฉันไม่รู้ว่ามันมีประโยชน์กับคุณอย่างไร ... แต่ ...

http://beerpla.net/2008/04/02/how-to-add-a-vim-file-extension-to-syntax-highlighting/

ฉันเพิ่มข้อความในกรณีที่หน้าถูกลบ ... หรือแก้ไข ...

วิธีการเพิ่มนามสกุลไฟล์เพื่อ vim เน้นไวยากรณ์โพสต์โดย Artem Russakovskii เมื่อ 2 เมษายน 2008 ในฐานข้อมูล, Linux, การเขียนโปรแกรม 24 อร่อยบันทึก 2 diggs แบ่งปัน 3retweet

อัปเดต: 8 กรกฎาคม 2009

วันนี้ฉันถูกถามคำถามเกี่ยวกับการกำหนดส่วนขยายที่กำหนดเองสำหรับการเน้นไวยากรณ์แบบ vim เช่นนั้นตัวอย่างเช่น vim จะรู้ว่า example.lmx นั้นเป็นประเภท xml และใช้การเน้นไวยากรณ์ของ xml กับมัน ฉันรู้ว่าเป็นกลุ่มโดยอัตโนมัติแล้วมันไม่เพียง แต่ขึ้นอยู่กับการขยาย แต่ด้วยการมองหาสตริงบางอย่างภายในข้อความเช่น

หลังจากขุดไปรอบ ๆ ฉันพบวิธีแก้ปัญหา เพิ่มสิ่งต่อไปนี้ใน ~ / .vimrc (ไฟล์คอนฟิกูเรชัน vim):

1 2 3 ไวยากรณ์ในไฟล์ประเภทบน au BufNewFile, BufRead * .lmx set filetype = xml หลังจากใช้งานไฟล์. lmx ของฉันจะถูกไฮไลต์:

หลักการเดียวกันนี้ใช้ได้ผลเช่นสำหรับการทิ้ง mysql ที่ฉันต้องทำเป็นครั้งคราว หากพวกเขาไม่มีส่วนขยาย. sql คุณจะได้รับสิ่งต่อไปนี้:

หลังจาก

1 2 3 ไวยากรณ์บนไฟล์ชนิดบน au BufNewFile, BufRead * .dump filetype = sql ทุกอย่างเรียบร้อยดี:

แต่ทำไมคุณถึงถามว่ามันทำงานอย่างไร

: help au: au [tocmd] [กลุ่ม] {event} {pat} [ซ้อนกัน] {cmd}

เพิ่ม {cmd} ไปยังรายการคำสั่งที่ Vim จะดำเนินการโดยอัตโนมัติใน {event} สำหรับการจับคู่ไฟล์ {pat} : ช่วย BufNewFile เมื่อเริ่มแก้ไขไฟล์ที่ไม่มีอยู่ : ช่วย BufRead เมื่อเริ่มแก้ไขบัฟเฟอร์ใหม่หลังจากอ่านไฟล์ลงในบัฟเฟอร์ : ไฟล์ประเภทช่วยเหลือจริง ๆ แล้วจะบอกเรื่องราวทั้งหมดนี้ในส่วน B และนั่นคือวิธีที่คุณทำมันคน


Huh, จะมีลักษณะที่ดีขึ้นในเร็ว ๆ นี้ แต่ดูมีประโยชน์ ..
sixtyfootersdude

ดีที่อาจแก้ปัญหาหนึ่ง แต่ฉันไม่คิดว่ามันจะแก้ปัญหานี้ ... ฉันคิดว่ากุญแจนี้จะทำอย่างไรกับ.vim/ftdetectไดเรกทอรี ...
sixtyfootersdude

ฉันไม่ได้ใช้ VIM ด้วยความซื่อสัตย์ดังนั้นฉันจะต้องใช้คำพูดของคุณกับมัน ...
Benjamin Schollnick

1

ฉันพยายามทำซ้ำสิ่งที่คุณทำ แต่ไม่สามารถนำไฟล์ประเภทนั้นไปใช้กับส่วนขยายอื่น ๆ ได้

ฉันก็พบว่าสิ่งนี้ช่วย:

Vim help-file สำหรับ 'new-filetype' กล่าวถึงการสร้าง 'filetype.vim' ของคุณเองใน~/.vim/filetype.vim และเขียนคำสั่งอัตโนมัติของคุณในไฟล์นั้น:

if exists("did_load_filetypes")
  finish
endif
augroup filetypedetect
  au! BufRead,BufNewFile *.jak      setfiletype jak
augroup END

ไวยากรณ์และคำสั่งไฮไลต์เหล่านั้นทั้งหมดจาก jak.vim ของคุณจำเป็นต้องเก็บไว้ใต้~/.vim/syntaxดังนั้นคัดลอกไปที่~/.vim/syntax/jak.vim(โดยไม่มีauคำสั่ง)

คุณจะต้องออกจาก Vim และเริ่มต้นใหม่เพื่อรับการเปลี่ยนแปลง


1

ฉันคิดว่าสิ่งต่าง ๆ อาจจะบิดไปมา แต่ฉันไม่มีความชำนาญ

ไฟล์เน้นไวยากรณ์ของคุณควรอยู่ในไดเรกทอรีไวยากรณ์ สิ่งที่อยู่ในคำแนะนำของ nsharish อาจเป็นสิ่งที่เข้าไปในไฟล์ที่คุณวางไว้ใน ftdetect

ส่วนนี้:

au BufRead,BufNewFile *.jak set filetype=jak

ใน. vimrc คุณอาจต้องเพิ่มบรรทัดเช่น:

au! syntax jak source $VIM/syntax/jak.vim

IMHO มันสมเหตุสมผลมากกว่านี้ ฉันหวังว่านี่จะช่วยได้.

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