저는 여러 그룹에서 작업하며 각 그룹에는 C에서 고유 한 탭 / 들여 쓰기 / 간격 표준이 있습니다.
각각에 대해 별도의 선택 가능한 VIM 구성을 갖는 방법이 있습니까? 그래서 파일을 편집 할 때 다음 중 하나를 수행하십시오.
set group=1
구성을 선택하는 것과 같은 작업 을합니다.- 작업 디렉토리에있는 로컬 .vimrc는 구성을 자동으로 설정하는 데 사용됩니다.
답변
요약해서 말하자면
이를 수행하는 몇 가지 방법이 있으며 그 중 대부분이 제안되었지만 두 가지 추가 방법으로 요약 할 것이라고 생각했습니다.
- vimrc에 디렉토리 당 – 빔이 올바른 디렉토리에서 시작해야한다는 단점이있다 : 프로젝트가있는 경우
~/project1
와, 당신은~/project1/.vim.custom
하고 할cd ~ ; vim project1/file.c
사용자 지정 설정을 찾을 수 없습니다. - Modelines-매우 효과적이지만 모든 파일에 추가해야한다는 단점이 있습니다 (새 파일에 추가해야 함).
- 디렉토리 특정 자동 명령-이것은 매우 효과적입니다.
- 파일에서 특정 헤더를 스캔합니다 (아래 참조)-이것은 과거에 다른 회사에서 일하거나 명확하게 이름이 지정된 프로젝트에서 가장 많이 사용했던 헤더입니다.
- 파일이 열릴 때 확인되는 디렉토리 별 vimrc입니다 (아래 참조). 특히 프로젝트 코드가 모두 한 곳에있는 경우 구현하기 매우 쉬운 또 다른 방법입니다.
헤더 스캔
많은 조직에서 모든 소스 파일의 맨 위에 표준 헤더 (저작권 고지 및 프로젝트 이름 등)가 있습니다. 이 경우 Vim이 파일의 첫 10 줄을 자동으로 스캔하여 키워드를 찾을 수 있습니다. 찾으면 설정을 변경할 수 있습니다. 내가 사용하는 양식 (다른 많은 작업을 수행함)보다 더 간단하게 만들도록 수정했지만 ~/.vim/after/filetype.vim
아직없는 경우 다음과 같이 추가합니다.
au FileType * call <SID>ConfigureFiletypes(expand("<amatch>"))
" List of file types to customise
let s:GROUPNAMETypes = ['c', 'cpp', 'vhdl', 'c.doxygen']
func! <SID>CheckForGROUPNAMECode()
" Check if any of the first ten lines contain "GROUPNAME".
" Read the first ten lines into a variable
let header = getline(1)
for i in range(2, 10)
let header = header . getline(i)
endfor
if header =~ '\<GROUPNAME\>'
" Change the status line to make it clear which
" group we're using
setlocal statusline=%<%f\ (GROUPNAME)\ %h%m%r%=%-14.(%l,%c%V%)\ %P
" Do other customisation here
setlocal et
" etc
endif
endfunc
func! <SID>ConfigureFiletypes(filetype)
if index(s:GROUPNAMETypes, a:filetype) != -1
call <SID>CheckForGROUPNAMECode()
endif
endfunc
모든 유형의 파일이 열리고 파일 유형이 설정 ( au FileType *
행) 될 때마다ConfigureFiletypes
함수가 호출됩니다. 파일 형식이 현재 그룹 (GROUPNAME)과 연결된 파일 형식 목록에 있는지 확인합니다 (이 경우 ‘c’, ‘cpp’, ‘vhdl’또는 ‘c.doxygen’). 그렇다면 CheckForGROUPNAMECode ()를 호출하여 파일의 처음 10 줄을 읽고 GROUPNAME을 포함하면 일부 사용자 지정을 수행합니다. 확장 탭 등을 설정하는 것 외에도 그룹 이름이 명확하게 표시되도록 상태 표시 줄이 변경되어 한 눈에 작동하는지 알 수 있습니다.
열 때 구성 확인
JS Bangs의 제안과 마찬가지로 사용자 정의 구성 파일을 갖는 것이 유용 할 수 있습니다. 그러나 vimrc에서로드하는 대신 .c 파일과 동일한 디렉토리에있는 .vim.custom에 대해 .c 파일이 열릴 때 확인하는 다음과 같은 것을 고려하십시오.
au BufNewFile,BufRead *.c call CheckForCustomConfiguration()
function! CheckForCustomConfiguration()
" Check for .vim.custom in the directory containing the newly opened file
let custom_config_file = expand('%:p:h') . '/.vim.custom'
if filereadable(custom_config_file)
exe 'source' custom_config_file
endif
endfunction
답변
나는 이것을 가지고있다 $HOME/.vimrc
:
if filereadable(".vim.custom")
so .vim.custom
endif
이를 통해 .vim.custom
모든 디렉토리에 파일 을 넣어 해당 디렉토리에 특정한 명령과 옵션을로드 할 수 있습니다. 디렉토리 구조가 깊은 여러 프로젝트에서 작업하는 경우 더 정교한 것이 필요할 수 있지만 (예 : a .vim.custom
가 발견 될 때까지 디렉토리 트리 위로 이동 ) 동일한 기본 아이디어가 작동합니다.
최신 정보:
이제 .vim
현재 디렉토리가 무엇이든 상관없이 편집중인 파일과 동일한 디렉토리에서 파일 을 읽기 위해 이와 같은 작업을 수행합니다 .
let b:thisdir=expand("%:p:h")
let b:vim=b:thisdir."/.vim"
if (filereadable(b:vim))
execute "source ".b:vim
endif
답변
경로별로 특정 옵션을 설정하는 자동 명령 을 넣을 수도 .vimrc
있습니다.
au BufRead,BufNewFile /path/to/project1/* setl sw=4 et
au BufRead,BufNewFile /path/to/project2/* setl sw=3 noet
답변
올바른 일을하는 플러그인 :
http://www.vim.org/scripts/script.php?script_id=441
“이 플러그인은 현재 열려있는 파일의 파일 시스템 트리에서 로컬 vimrc 파일을 검색합니다. 기본적으로 파일 디렉토리에서 루트 디렉토리까지 모든 “.lvimrc”파일을 검색하여 역순으로로드합니다. 로드 된 파일의 파일 이름과 양은 전역 변수를 통해 사용자 정의 할 수 있습니다.”
답변
동료 개발자가 이에 대해 불평하지 않는다고 가정하면 언제든지 주석의 각 파일에 vim 설정을 추가 할 수 있습니다.
/*
* vim:ts=4:sw=4:expandtab:...
*/
int main(int argc, char **argv)
{
...
답변
이 목적을 위해 오픈 소스 도구를 만들었습니다. 헤더, 스캔, 구성 및 로컬 vimrc 파일은 잊어 버리십시오.
수영을 시도하십시오.
수영
swim
vimrc 파일을 전환하고 편리한 별칭을 만드는 빠른 도구입니다. 다음은 간단한 사용 목록입니다. 연습 gif 및 다운로드 지침 은 Github repo 를 참조하십시오 .
용법
swim add ~/dotfiles/myVimrc favorite #Add new swim alias
swim ls #Show available swim aliases
swim add https://raw.githubusercontent.com/dawsonbotsford/swim/master/exampleVimrcs/vimrcWikia.vim example
swim with favorite #Set alias favorite as primary .vimrc
swim with main #Set alias main as primary .vimrc
더 읽어보기
답변
이전 포스터에서 제안한 localvimrc 플러그인을 사용해 본 후, vim 설정을 프로젝트별로 제어하는 것이 매우 마음에 듭니다.
기본적으로 .lvimrc 파일을로드하기 전에 확인을 요청하지만 .lvimrc 파일을 자동으로로드하는 설정이 있습니다. 일부는 이것을 보안 허점으로 볼 수 있지만 광고 된대로 작동합니다.
.lvimrc 파일을 .gitignore로 선택했습니다. 또는 공유 설정 (탭 / 스페이스 확장, 탭 중지, 기타 프로젝트 별 설정)의 형태로 체크인 할 수 있습니다.
