tạo một cú pháp tô sáng vim đơn giản


25

tôi có một loại đơn giản của một tệp cơ sở dữ liệu chỉ bao gồm các mục theo định dạng sau

biến = giá trị

tôi muốn tạo một cú pháp vim đơn giản làm nổi bật cho nó và đặt nó cho phần mở rộng tập tin cụ thể

Ví dụ, biến một phần có thể là màu xanh nhạt, và giá trị ánh sáng phần đỏ

i googled nó và đi qua những thứ như $vimruntime\syntax\, syntax set=, syntax match, và hitừ khóa, nhưng không thể thiết lập nó bản thân mình cuối cùng

vì vậy tôi muốn một đoạn mã vim rất đơn giản sẽ nhận ra nó bằng cách khớp hai bên tay trái và phải và tô màu chúng một cách riêng biệt

Câu trả lời:


31

Giả sử phần mở rộng tập tin của bạn là *.fooĐỒNG

  1. Tạo các tệp và thư mục này nếu chúng không tồn tại:

    $HOME/.vim/ftdetect/foo.vim
    $HOME/.vim/syntax/foo.vim
    
  2. Đặt những thứ sau vào $HOME/.vim/ftdetect/foo.vim:

    autocmd BufRead,BufNewFile *.foo set filetype=foo
    
  3. Đặt những thứ sau vào $HOME/.vim/syntax/foo.vim:

    syntax match FooKey   /^[^=]\+/
    syntax match FooValue /[^=]\+$/
    
  4. Đặt các dòng sau vào cuối $HOME/.vimrc(hoặc ít nhất là sau bất kỳ colorschemedòng nào ):

    highlight FooKey   ctermfg=cyan guifg=#00ffff
    highlight FooValue ctermfg=red  guifg=#ff0000
    
  5. Hãy chắc chắn rằng bạn có dòng sau ở đâu đó trong ~/.vimrc:

    syntax on
    

Wow, OP có hai giải pháp gần như giống hệt nhau với giá của một! Tôi thích cách cả hai giải pháp của chúng tôi rất giống nhau, nhưng khác biệt về chi tiết.
Ingo Karkat

nó hoạt động, nhưng một lần nữa tôi phải gõ thủ công ftype=mọi lúc trong vim, không có fdetectthư mục nào trong $vimrnutime(tôi đang ở trên windows %programfiles(x86)%\vim\vim74\ ), tôi đã tạo nó, nhưng nó vẫn không phản ứng

Bạn cần syntax ontrong vimrc của bạn.
romainl

20

Kịch bản cú pháp

Tạo một tệp ~/.vim/syntax/simple.vimcó nội dung sau:

" Quit when a syntax file was already loaded.
if exists('b:current_syntax') | finish|  endif

syntax match simpleVar "\k\+" nextgroup=simpleAssignment
syntax match simpleAssignment "=" contained nextgroup=simpleValue
syntax match simpleValue ".*" contained

hi def link simpleVar Identifier
hi def link simpleAssignment Statement
hi def link simpleValue String

let b:current_syntax = 'simple'

Điều đó phù hợp với ba yếu tố cú pháp và cung cấp màu mặc định. Người ta thường không xác định màu rõ ràng, nhưng thay vào đó, liên kết đến các nhóm tô sáng mặc định được xác định bởi màu sắc của bạn. Bạn có thể liệt kê tất cả thông qua :hi. Để điều chỉnh, hãy đọc :help :syntax:help usr_44.txtxem qua các tập lệnh cú pháp đi kèm với Vim.

Phát hiện Filetype

Cho đến nay, bạn phải tự tay :set syntax=simpleđể hoạt động. Để làm điều này tự động, bạn phải dạy cho Vim về kiểu tệp mới của bạn .

Tạo một tệp ~/.vim/ftdetect/simple.vimcó nội dung sau:

autocmd BufNewFile,BufRead *.simple setf simple

Điều này giả định rằng các tệp có thể được xác định thông qua tên tệp (cp. :help autocmd-patterns). Bạn cũng có thể phát hiện dựa trên đường dẫn (vị trí tệp) hoặc thậm chí nội dung. :help new-filetypecó chi tiết.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.