2010-03-05 4 views
5

저는 매일 여러 개의 다른 프로그래밍 언어를 사용합니다. 각기 다른 탭 폭 (공백으로)을 갖고 싶습니다. 예를 들면 : 나는 Ruby를 위해 "표준"2 칸을 사용하지만, 기존의 모든 Matlab 코드는 4 칸을 사용합니다.vim에서 Matlab 용 자동 명령?

augroup lang_perl 
    au! 
    set tabstop=4 " tabstop length N in spaces 
    set shiftwidth=4 " make >> and friends (<<, ^T, ^D) shift N, not the default 8 
    set expandtab " Use spaces instead of tabs 
augroup END 

augroup lang_ruby 
    au! 
    set tabstop=2 " tabstop length N in spaces 
    set shiftwidth=2 " make >> and friends (<<, ^T, ^D) shift N, not the default 8 
    set expandtab " Use spaces instead of tabs 
augroup END 

그 일을하지만, 다음과 같은하지 않습니다 :

내 개인 ~/.vimrc에서이이

augroup lang_matlab 
    au! 
    set tabstop=4 " tabstop length N in spaces 
    set shiftwidth=4 " make >> and friends (<<, ^T, ^D) shift N, not the default 8 
    set expandtab " Use spaces instead of tabs 
augroup END 

정말 augroup lang_ruby 그림 밖으로이 난 것이 이해가 안 돼요 루비 파일 편집. (검색 결과는 ftdetect 이었지만 해결책은 분명하지 않았습니다.) vim은 내가 augroup lang_matlab을 사용하여 Matlab을 편집하고 있음을 알지 못합니다. 이 작품을 만들기 위해 무엇을 바꾸어야합니까?

+0

matlab (.m) 파일을 편집 할 때': set filetype? '을 입력하면'filetype = matlab'으로 응답합니까? .m 파일을 다른 언어로 식별하는 것이 가능합니다. – jagill

답변

2

를 참조하십시오, 당신은 ~/.vim/ftplugin/{filetype}.vim로 또는 ~/.vim/ftplugin/{filetype}/**/*.vim (예 : ~/.vim/ftplugin/ruby/foo.vim, ~/.vim/ftplugin/ruby/foo/bar.vim)과 일치 파일에 넣어해야합니다. 이 경우에는 자동 명령이 필요하지 않습니다. 당신은 여전히 ​​autocommands를 사용하려면, 다음을 사용 :

augroup lang_matlab 
    autocmd! 
    autocmd FileType matlab  setlocal ts=4 sw=4 et 
augroup END 

합니다. FileType 이벤트 (거기에는 BufRead, BufNewFile이 없음)와 setlocal (일반 set 대신)이 있습니다. 첫 번째는 파일 유형 설정에 사용되고, 두 번째는 버퍼 특정 옵션을 설정해야하는 방법입니다.펄 및 루비 설정이 적용 이유에 대해 왜 MATLAB 설정

하지 않습니다 : 귀하의 예제 코드를 그냥 그래서, 당신은 효과적으로 ts=2 sw=2 et을 설정

augroup lang_perl 
    autocmd! 
augroup END 
augroup lang_ruby 
    autocmd! 
augroup END 

set tabstop=4 " tabstop length N in spaces 
set shiftwidth=4 " make >> and friends (<<, ^T, ^D) shift N, not the default 8 
set expandtab " Use spaces instead of tabs 

set tabstop=2 " tabstop length N in spaces 
set shiftwidth=2 " make >> and friends (<<, ^T, ^D) shift N, not the default 8 
set expandtab " Use spaces instead of tabs 

과 동일합니다. 그러나 $VIMRUNTIME/ftplugin/perl.vim 다음 코드가 포함되어 당신의 vimrc에

setlocal tabstop=4 
setlocal shiftwidth=4 

때문에, 펄에 대한 ts=4 sw=4ftplugin/perl.vim로 설정되어 하지을 (당신은 펄 지원 플러그인을 설치 한 경우). vimrc에서 tabstop=4tabstop=8으로 대체하여 검사 할 수 있습니다.

0

lang_perl 또는 lang_ruby을 어떻게 읽어야할지 알 수 없습니다.

augroup gzip 
    autocmd! 
    autocmd BufReadPre,FileReadPre  *.gz set bin 
    autocmd BufReadPost,FileReadPost  *.gz '[,']!gunzip 
    autocmd BufReadPost,FileReadPost  *.gz set nobin 
    autocmd BufReadPost,FileReadPost  *.gz execute ":doautocmd BufReadPost " . expand("%:r") 
    autocmd BufWritePost,FileWritePost *.gz !mv <afile> <afile>:r 
    autocmd BufWritePost,FileWritePost *.gz !gzip <afile>:r 
    autocmd FileAppendPre    *.gz !gunzip <afile> 
    autocmd FileAppendPre    *.gz !mv <afile>:r <afile> 
    autocmd FileAppendPost    *.gz !mv <afile> <afile>:r 
    autocmd FileAppendPost    *.gz !gzip <afile>:r 
augroup END 

그것을 참조 :하지만 자동 명령 문서에서 찾고 gzip으로 압축 된 파일에 대한 예 (:he gzip-example)를 표시합니다? 지정된 autocmd마다 이벤트 (BufReadPre, FileReadPre)와 실행될 확장명 (*.gz)이 전달됩니다. 이것은 귀하의 augroup에 대해 어떤 이름을 사용할 수 있지만 올바르게 작동하려면 augroup이 담당해야하는 내선을 지정해야한다는 나의 의견을지지합니다.

:he autocmd-groups의 또 다른 인용

: 자동 autocommands을 실행할 때

일반적으로는, 빔은 모든 그룹에 대한 autocommands 을 사용합니다. 그룹은 ": doautocmd"또는 ": doautoall"로 자동 명령을 실행할 때 또는 자동 명령을 정의하거나 삭제할 때만 중요합니다.

그래서, MATLAB 파일에 대한 augroup을하기 위해,이 트릭 수행해야합니다

augroup lang_matlab 
    autocmd! 
    autocmd BufRead  *.m set ts=4 sw=4 expandtab 
augroup END 

을 그리고 이러한 설정을 할 수있는 augroup의 덮어 쓰기되지 않도록해야합니다 무조건적인 것 (즉, 다른 augroup 정의도 수정).

+0

'autocmd BufRead * .m set ts = 4 sw = 4 expandtab'에는 두 가지 오류가 있습니다 : 1)'$ VIMRUNTIME/ftplugin'에있는 플러그인과 같은 파일 유형별 설정에'setlocal'을 사용하십시오; 2)'$ VIMRUNTIME/filetype.vim'에 의해 이미 수행 된 작업을 재실행하지 마십시오 :'BufRead * .m' 대신에'FileType matlab'을 사용하십시오. – ZyX

+0

@ZyX : 여기서 설정되는 설정 (ts, sw, expandtab)은 버퍼 로컬이므로이 설정은 문제가되지 않습니다. 그리고 * 오류 * IMHO 너무 큰 단어입니다. – eckes

+0

@ ZyX : 답이 100 % 정확하지 않다면 적어도 ** 작동한다고 주장 할 수 있습니다. ** 작년 3 월 이후로 굶어 죽어가는 질문을 다시 가져 왔습니다 :-) – eckes

0

ftplugins를 사용하면 vim을 구성하는 것이 훨씬 더 쉽습니다. 당신이 {파일 형식}에 대한 설정의 큰 숫자를 가지고 싶다면 gVim and multiple programming languages

관련 문제