Làm nổi bật Vim cho các loại tệp cụ thể (nơi đặt tệp cú pháp, sự kiện vim, dòng để đặt vào vimrc)


17

Tôi đã xác định thời gian tệp jak.vimđể cung cấp đánh dấu tùy chỉnh khi tôi ghi chú, tuy nhiên nó đang được áp dụng cho một số tệp không có .jakphần mở rộng. Cụ thể một tập tin có tên progress.jlog. Chỉ cần để kiểm tra nếu vấn đề là cụ thể để mở rộng mà tôi đổi tên progress.jlogđể progress(không mở rộng) nhưng gặp phải sự cố tương tự.

Tôi đã làm gì:

  • Tôi đã tạo jak.vimtrong thư mục~/.vim/ftdetect
  • Tôi đã thêm dòng này: "au BufRead, BufNewFile * .jak set filetype = jak" lên đầu như mô tả trong tham chiếu vim
  • Tôi đã khởi động lại vim (: x, và sau đó mở lại)

Đây là những gì tôi ~/.vim/ftdetect/jak.vimtrông giống như:

~/.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

Và chỉ cần kích hoạt bạn cần biết đây là giao diện của tôi .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

Lưu ý: Tôi đã hoàn thành tất cả các trích dẫn (ý kiến) để dễ đọc hơn


Cập nhật

Tôi thấy bài viết của nsharish rất hữu ích. Họ đề nghị tôi thêm cái này vào vimrc của mình:

au BufRead,BufNewFile *.jak set filetype=jak

và thêm jak.vimtập tin của tôi vào~/.vim/syntax

Thật không may, mã đó xung đột với hai dòng này (trong vimrc của tôi)

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

Tôi sử dụng hai cái này để lưu các nếp gấp, vị trí con trỏ, v.v. khi tải vim (xem :help lo). Nếu tôi nhận xét hai dòng gợi ý của nsharish hoạt động như một nét duyên dáng. Với hai dòng đó, không có phần nào nổi bật trong bất kỳ tệp nào của tôi.

Phần kết luận

Tôi đánh dấu câu trả lời của Nsharish là câu trả lời hay nhất (vì nó hữu ích nhất với tôi). Tuy nhiên đây là cách tôi giải quyết vấn đề:

Nsharish đã đúng Tôi cần dòng này trong .vimrc:

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

Và tôi cần phải di chuyển jak.vimtập tin của tôi đến ~/.vim/syntax.

Tuy nhiên, như đã lưu ý ở trên, đã có xung đột với những dòng này:

au BufWinLeave * mkview
au BufWinEnter * silent loadview

Khi những dòng này được nhận xét, làm nổi bật làm việc.

Điều tôi cần làm là thay đổi ...set filetype...điều này:

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

Tôi nghĩ rằng BufWin Entry được gọi sau tệp BufRead / BufNew để phần tô sáng bị ghi đè bởi định dạng được lưu từ lần trước.

Cảm ơn một lần nữa để nsharish đã giúp tôi đưa ra giải pháp này.


1
theo nghĩa nào thì các câu lệnh * .c xung đột với câu lệnh * .jak?
akira

Câu trả lời:


10

Bạn đã thử điều này ..

  • Đặt jak.vim của bạn trong thư mục .vim / cú pháp
  • chỉ đặt các dòng sau trong tệp .vimrc của bạn.
cú pháp cho phép 
au BufRead, BufNewFile * .jak đặt filetype = jak
Tôi đã thử điều này với tệp jak.vim của bạn .... Nó hoạt động tốt với tôi ....
Tôi đang sử dụng vim7.2 ...
chỉnh sửa:
Hãy thử điều này,
tôi gặp vấn đề tương tự với các dòng mkview và loadview đó ... chỉ cần đặt filetype một lần trong tệp và nó sẽ được giữ lại sau đó

Mở tệp, sau đó thực hiện " : set ft = jak ", lưu tệp và thoát vim .... Bây giờ, hãy mở lại tệp ... tô sáng cú pháp sẽ hoạt động ngay bây giờ ...
mkviewloadview dường như lưu các cài đặt tô sáng cú pháp cuối cùng cũng thế....


đang thử ngay bây giờ ... Nhưng bạn có biết thư mục .vim / ftdetect / không? Hành vi tôi gặp phải là bất kỳ tệp định dạng nào trong đó đều áp dụng cho tất cả các loại tệp.
Sixty feetersdude

Huh, điều đó đã làm việc một phần .. Tuy nhiên, có một mâu thuẫn với hai dòng khác trong vimrc của tôi. Xem cập nhật của tôi.
Sixty feetersdude

2

Tôi phải thừa nhận, tôi không biết chắc chắn điều này sẽ hữu ích với bạn như thế nào ... Nhưng ...

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

Tôi đã nối thêm văn bản khi trang bị gỡ xuống ... Hoặc bị thay đổi ...

Làm thế nào để thêm một phần mở rộng tập tin vào vim Cú pháp tô sáng được đăng bởi Artem Russakovskii vào ngày 2 tháng 4 năm 2008 trong Cơ sở dữ liệu, Linux, Lập trình 24 ngon lành tiết kiệm 2 diggs Chia sẻ 3r tweet

Cập nhật: ngày 8 tháng 7 năm 2009

Hôm nay tôi được hỏi một câu hỏi về việc xác định các phần mở rộng tùy chỉnh để làm nổi bật cú pháp vim sao cho, ví dụ, vim sẽ biết rằng example.lmx thực sự thuộc loại xml và áp dụng tô sáng cú pháp xml cho nó. Tôi biết vim đã tự động thực hiện nó không chỉ dựa trên tiện ích mở rộng mà bằng cách tìm kiếm các chuỗi nhất định bên trong văn bản, như

Sau khi đào xung quanh tôi tìm thấy giải pháp. Thêm phần sau vào ~ / .vimrc (tệp cấu hình vim):

Cú pháp 1 2 3 về filetype trên au BufNewFile, BufRead * .lmx set filetype = xml Sau khi áp dụng nó, tệp .lmx của tôi được tô sáng:

Nguyên tắc tương tự hoạt động, ví dụ, đối với các bãi chứa mysql mà tôi phải làm theo thời gian. Nếu họ không có tiện ích mở rộng .sql, bạn sẽ nhận được một cái gì đó như:

Sau

Cú pháp 1 2 3 về filetype trên au BufNewFile, BufRead * .dump set filetype = sql mọi thứ đều ổn:

Nhưng tại sao và làm thế nào nó hoạt động, bạn yêu cầu?

: help au: au [tocmd] [nhóm] {event} {pat} [lồng nhau] {cmd}

Thêm {cmd} vào danh sách các lệnh mà Vim sẽ tự động thực thi trên {event} cho tệp khớp với {pat}. : help BufNewFile Khi bắt đầu chỉnh sửa một tệp không tồn tại. : help BufRead Khi bắt đầu chỉnh sửa bộ đệm mới, sau khi đọc tệp vào bộ đệm. : help filetype sẽ thực sự kể toàn bộ câu chuyện này trong phần B. Và đó là cách bạn làm điều đó, thưa các bạn.


Huh, sẽ sớm có cái nhìn tốt hơn về vấn đề này, nhưng có vẻ hữu ích ..
sixty feetersdude

Chà, điều đó có khả năng giải quyết được một vấn đề nhưng tôi không nghĩ rằng nó sẽ giải quyết được vấn đề này ... Tôi nghĩ rằng chìa khóa của vấn đề này phải làm với .vim/ftdetectthư mục ...
sixty feetersdude

Tôi thực sự thậm chí không sử dụng VIM, vì vậy tôi sẽ phải chú ý đến nó ...
Benjamin Schollnick

1

Tôi đã thử tái tạo những gì bạn đã làm, nhưng không thể áp dụng kiểu tệp cho các tiện ích mở rộng khác.

Tôi cũng thấy rằng điều này đã giúp:

Tệp trợ giúp Vim cho 'new-filetype' đề cập đến việc tạo 'filetype.vim' của riêng bạn ~/.vim/filetype.vim và viết các lệnh tự động của bạn trong tệp đó:

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

Tất cả các cú pháp và tô sáng các lệnh từ jak.vim của bạn cần được lưu trữ bên dưới ~/.vim/syntax, vì vậy hãy sao chép nó vào ~/.vim/syntax/jak.vim(không có aulệnh).

Bạn cũng sẽ phải thoát Vim và khởi động lại để nhận các thay đổi.


1

Tôi nghĩ mọi thứ có thể bị xoắn lại, nhưng tôi không phải là chuyên gia vim.

Tập tin đánh dấu cú pháp của bạn phải nằm trong thư mục cú pháp. Những điều trong lời khuyên của nsharish có thể là những gì đi vào tập tin bạn đặt bên trong ftdetect.

Phần này:

au BufRead,BufNewFile *.jak set filetype=jak

Trong .vimrc, bạn cũng có thể cần thêm một dòng như:

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

IMHO, nó có ý nghĩa hơn theo cách này. Tôi hi vọng cái này giúp được.

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.