특정 파일 형식에 대한 Vim 강조 표시 (구문 파일을 넣을 위치, vim 이벤트, vimrc에 넣을 행)


17

jak.vim메모 할 때 사용자 지정 강조 표시를 제공하기 위해 파일 시간 을 정의했지만 .jak확장명 이없는 일부 파일에 적용됩니다 . 특히라는 파일 progress.jlog입니다. 문제가 해당 확장에만 해당되는지 테스트 progress.jlog하기 위해 progress(확장자 없음)으로 이름 을 바꾸 었지만 동일한 문제가 발생했습니다.

제가 한:

  • 나는 jak.vim디렉토리에서 만들었습니다~/.vim/ftdetect
  • vim 참조에 설명 대로 "au BufRead, BufNewFile * .jak set filetype = jak"줄을 추가했습니다.
  • vim (: 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

vim을로드 할 때이 두 가지를 사용하여 접기, 커서 위치 등을 저장합니다 (참조 :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 "를 실행하고 파일을 저장 한 후 vim을 종료하십시오 .... 이제 파일을 다시여십시오 ... 구문 강조 표시가 작동해야합니다 ...
mkviewloadview 가 마지막 구문 강조 표시 설정을 저장하는 것 같습니다 또한....


지금 시도 중이지만 .vim / ftdetect / 폴더가 무엇을하는지 알고 있습니까? 내가 겪고있는 행동은 거기에있는 모든 형식 파일이 모든 파일 형식에 적용된다는 것입니다.
sixtyfootersdude

허, 그것은 부분적으로 효과가 있었다. 그러나 내 vimrc에서 다른 두 줄과 충돌이 있었다. 내 업데이트를 참조하십시오.
sixtyfootersdude

2

나는 이것이 당신에게 얼마나 유용한 지 잘 모르겠습니다 ...하지만 ...

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

페이지가 게시 중단 될 경우를 대비하여 텍스트를 추가했습니다.

vim 구문 강조에 파일 확장자를 추가하는 방법 게시자 : Artem Russakovskii, 2008 년 4 월 2 일, 데이터베이스, Linux, 프로그래밍 24 맛있는 저장 2 diggs 공유 3retweet

업데이트 날짜 : 2009 년 7 월 8 일

오늘 vim 구문 강조를위한 사용자 정의 확장 정의에 관한 질문을 받았는데, 예를 들어 vim은 example.lmx가 실제로 xml 유형이고 xml 구문 강조를 적용한다는 것을 알 수 있습니다. vim은 이미 확장 기능을 기반으로 할뿐만 아니라 텍스트 내에서 특정 문자열을 찾아서 자동으로 수행한다는 것을 알고 있습니다.

주변을 파고 난 후 해결책을 찾았습니다. ~ / .vimrc (vim 구성 파일)에 다음을 추가하십시오.

1 2 3 au BufNewFile, BufRead의 파일 유형에 대한 구문 * .lmx set filetype = xml 파일을 적용하면 내 .lmx 파일이 강조 표시됩니다.

예를 들어, 때때로 수행 해야하는 mysql 덤프에도 동일한 원칙이 적용됩니다. 확장명이 .sql이 아닌 경우 다음과 같은 결과가 나타납니다.

au BufNewFile, BufRead * .dump set filetype = sql의 파일 형식에 대한 구문은 모든 것이 정상입니다.

그러나 왜 그리고 어떻게 작동합니까?

: help au : au [tocmd] [group] {event} {pat} [중첩 됨] {cmd}

{pat}와 일치하는 파일에 대해 Vim이 {event}에서 자동으로 실행하는 명령 목록에 {cmd}를 추가하십시오. : help BufNewFile 존재하지 않는 파일을 편집 할 때. : help BufRead 새 버퍼를 편집 할 때 파일을 버퍼로 읽은 후. : help filetype은 실제로이 모든 이야기를 파트 B에 알려줄 것입니다. 여러분이 그렇게하는 방식입니다.


허, 곧 이것에 대해 더 잘 살펴볼 것이지만 유용 해 보인다 ..
sixtyfootersdude

글쎄, 그것은 잠재적으로 하나의 문제를 해결할 수 있지만이 문제를 해결할 것이라고 생각하지 않습니다 ... 이것의 열쇠는 .vim/ftdetect디렉토리 와 관련이 있다고 생각합니다 ...
sixtyfootersdude

나는 솔직히 VIM을 사용하지 않기 때문에 그것에 대해 당신의 말을 들어야 할 것입니다.
Benjamin Schollnick

1

나는 당신이 한 일을 재현하려고 시도했지만 파일 형식을 다른 확장자에 적용 할 수 없었습니다.

또한 이것이 도움이되었다는 것을 알았습니다.

'new-filetype'에 대한 Vim 도움말 파일은 고유 한 '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.