Vim은 모든 파일 형식에서 autocmd를 실행합니다.


81

쓰기 전에 파일의 후행 공백을 제거하는 Vim autocmd가 있습니다. 나는 거의 100 % 이것을 원하지만 비활성화하고 싶은 파일 유형이 몇 가지 있습니다. 일반적인 지혜는 autocmd가 실행할 파일 유형을 쉼표로 구분 된 목록으로 나열하는 것입니다. 예 :

autocmd BufWritePre *.rb, *.js, *.pl

그러나이 경우에는 부담 스러울 것입니다.

패턴과 일치하는 파일을 제외한 모든 파일에 대해 autocmd 패턴을 일치시키는 방법이 있습니까? 문서에서 NOT 매처에 해당하는 것을 찾을 수 없습니다.

답변:


66

*.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

1
맞습니다. 특정 파일 확장자를 제외하고 설명에서 용어를 오용하는 패턴을 원했습니다. 한 줄짜리를 원했지만 논리를 함수로 감싸고 호출하는 것은 너무 초라하지 않습니다. 감사!
jerodsanto

vim 구성을보다 모듈화 let b:noStripWhitespace하려면 파일 유형 플러그인 섹션의 파일에 설정 을 추가 할 수 있습니다 . git 커밋에 대한 후행 공백 제거를 비활성화하려면 Fx에 ~/.vim/ftplugin/gitcommit.vim.
flyingdutchman

58

한 줄 방법의 또 다른 선택 :

let blacklist = ['rb', 'js', 'pl']
autocmd BufWritePre * if index(blacklist, &ft) < 0 | do somthing you like

그런 다음 블랙리스트에있는 파일 유형을 제외한 모든 파일 유형에 대해 원하는 작업을 수행 할 수 있습니다.


15

가장 쉬운 방법은 하나의 파일 유형에 대한 지역 변수를 true로 설정하는 것입니다. 그런 다음 해당 변수가 false (다른 모든 항목에 대해 설정된 경우)이거나 전혀 존재하는 경우 (사전 설정할 필요 없음) automcommand를 설정합니다.

autocmd BufWritePre *.foo let b:foo=true

if !exists("b:foo")
    autocmd ...
endif

주석에 따라 변경된 변수 접두사


1

이것은 Syntax패턴 ( <match>)이 파일 유형 인 자동 명령에서 작동합니다 . 모든 rst파일을 제외 합니다.

au Syntax *\(^rst\)\@<! …

1

.vimrc 설정 파일은 시작할 때 한 번만 실행됩니다. 따라서 이때 if 테스트를 넣으면 현재 편집중인 python 파일이 없기 때문에 작동하지 않습니다.

그러나 .vimrc를 사용하여 자동 동작을 설정할 수 있습니다. vim이 특별한 조건을 만날 때마다 수행 할 작업입니다. 조건은 다음과 같습니다. "새 파일이 편집 중이며 파일 유형은 'python'입니다." 참조 : h : au

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.