Vim은 모든 파일 형식에서 autocmd를 실행합니다.
쓰기 전에 파일의 후행 공백을 제거하는 Vim autocmd가 있습니다. 나는 이것을 거의 100 % 원하지만 비활성화하고 싶은 파일 유형이 몇 가지 있습니다. 일반적인 지혜는 autocmd가 실행할 파일 유형을 쉼표로 구분 된 목록으로 나열하는 것입니다. 예 :
autocmd BufWritePre *.rb, *.js, *.pl
그러나이 경우에는 부담 스러울 것입니다.
패턴과 일치하는 파일을 제외한 모든 파일에 대해 autocmd 패턴을 일치시키는 방법이 있습니까? 문서에서 NOT 매처에 해당하는 것을 찾을 수 없습니다.
*.rb
파일 형식이 아닙니다. 파일 패턴입니다. ruby
파일 유형이며 .rb
확장자 가없는 파일에도 설정할 수 있습니다 . 따라서 가장 원하는 것은 autocmd가 작동하지 않아야하는 파일 유형을 확인하고 공백을 제거하기 위해 호출하는 함수입니다.
fun! StripTrailingWhitespace()
" Don't strip on these filetypes
if &ft =~ 'ruby\|javascript\|perl'
return
endif
%s/\s\+$//e
endfun
autocmd BufWritePre * call StripTrailingWhitespace()
evan의 대답을 바탕으로 버퍼 로컬 변수를 확인하고이를 사용하여 스트립을 수행할지 여부를 결정할 수 있습니다. 또한 일반적으로 제거하는 파일 유형 인 버퍼를 제거하지 않기로 결정한 경우 일회성 비활성화를 수행 할 수도 있습니다.
fun! StripTrailingWhitespace()
" Only strip if the b:noStripeWhitespace variable isn't set
if exists('b:noStripWhitespace')
return
endif
%s/\s\+$//e
endfun
autocmd BufWritePre * call StripTrailingWhitespace()
autocmd FileType ruby,javascript,perl let b:noStripWhitespace=1
한 줄 방법의 또 다른 선택 :
let blacklist = ['rb', 'js', 'pl']
autocmd BufWritePre * if index(blacklist, &ft) < 0 | do somthing you like
그런 다음 블랙리스트에있는 파일 유형을 제외한 모든 파일 유형에 대해 원하는 작업을 수행 할 수 있습니다.
가장 쉬운 방법은 하나의 파일 유형에 대한 지역 변수를 true로 설정하는 것입니다. 그런 다음 해당 변수가 false (다른 모든 항목에 대해 설정된 경우)이거나 전혀 존재하는 경우 (사전 설정할 필요 없음) automcommand를 설정합니다.
autocmd BufWritePre *.foo let b:foo=true
if !exists("b:foo")
autocmd ...
endif
주석에 따라 변경된 변수 접두사
참고 URL : https://stackoverflow.com/questions/6496778/vim-run-autocmd-on-all-filetypes-except
'Development Tip' 카테고리의 다른 글
Dia의 UML 시퀀스 다이어그램? (0) | 2020.11.01 |
---|---|
홈브류 공식을 수정하는 방법? (0) | 2020.11.01 |
Ruby에서 파일 유형 결정 (0) | 2020.11.01 |
손상된 WPF 데이터 바인딩을 감지하는 방법은 무엇입니까? (0) | 2020.11.01 |
tkinter를 사용하여 타이머를 만드는 방법은 무엇입니까? (0) | 2020.11.01 |