저는 여러 그룹에서 작업하며 각 그룹에는 C에서 고유 한 탭 / 들여 쓰기 / 간격 표준이 있습니다.
각각에 대해 별도의 선택 가능한 VIM 구성을 갖는 방법이 있습니까? 그래서 파일을 편집 할 때 다음 중 하나를 수행하십시오.
set group=1구성을 선택하는 것과 같은 작업 을합니다.- 작업 디렉토리에있는 로컬 .vimrc는 구성을 자동으로 설정하는 데 사용됩니다.
저는 여러 그룹에서 작업하며 각 그룹에는 C에서 고유 한 탭 / 들여 쓰기 / 간격 표준이 있습니다.
각각에 대해 별도의 선택 가능한 VIM 구성을 갖는 방법이 있습니까? 그래서 파일을 편집 할 때 다음 중 하나를 수행하십시오.
set group=1구성을 선택하는 것과 같은 작업 을합니다.답변:
이를 수행하는 몇 가지 방법이 있으며 그 중 대부분이 제안되었지만 두 가지 추가 방법으로 요약 할 것이라고 생각했습니다.
~/project1와, 당신은 ~/project1/.vim.custom하고 할cd ~ ; vim project1/file.c 사용자 지정 설정을 찾을 수 없습니다.많은 조직에서 모든 소스 파일의 맨 위에 표준 헤더 (저작권 고지 및 프로젝트 이름 등)가 있습니다. 이 경우 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
'exrc'옵션은 이미 이와 매우 유사한 작업을 허용합니다. 현재 작업 디렉토리에 .vimrc/ .exrc/ .gvimrc를 로드합니다 .
exrc정답이어야합니다. 다른 모든 것은 엉망이고 복잡해 보입니다.
exrc것은 좋지만 편집중인 파일과 동일한 작업 디렉토리에 있지 않아도 올바른 파일을 얻는 것에 감사드립니다.
경로별로 특정 옵션을 설정하는 자동 명령 을 넣을 수도 .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 파일은 잊어 버리십시오.
수영을 시도하십시오.
swimvimrc 파일을 전환하고 편리한 별칭을 만드는 빠른 도구입니다. 다음은 간단한 사용 목록입니다. 연습 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로 선택했습니다. 또는 공유 설정 (탭 / 스페이스 확장, 탭 중지, 기타 프로젝트 별 설정)의 형태로 체크인 할 수 있습니다.
.lvimrc파일을에 추가하는 이유는 무엇 .gitignore입니까? 요점은 vim을 사용하고 플러그인이 설치된 모든 사람이 동일한 설정을 갖게된다는 것입니다.
다음은 jamessan의 변형입니다.
function! ConditionalLoad()
let cwd = getcwd()
if getcwd() =~ $HOME . "/src/mobile"
so $HOME/.vim.mobile
endif
endfunction
autocmd VimEnter * call ConditionalLoad()
점프하는 특정 파일없이 vi를 자주 실행하여 현재 작업 디렉토리를 기반으로 조건부로 구성을로드 할 수 있습니다. 단점은 구성이 파일을 기반으로 적용되지 않고 작업 디렉토리 외부에 적용된다는 것입니다.
~/.vimrc변경, /src/mobile내 심포니 프로젝트 디렉토리에 (내 경우에는 그것이 /www/symfony) 수정 .vim.mobile에 .vim.symfony다음 배치 새의 .vimrc의 구성 내부의 ~/.vim.symfony파일
저는 여러 그룹에서 작업하며 각 그룹에는 C에서 고유 한 탭 / 들여 쓰기 / 간격 표준이 있습니다.
저는 모든 종류의 오픈 소스로 동시에 작업합니다. 별도의 .vimrc파일을 만들고 서식 표준을 재구성하는 것은 실용적이지 않습니다 . 10여 년 전, 마침내 에디터 구성을 다루는 데 지쳐서 autotab그것을 처리 하는 프로그램을 작성 했습니다.
autotabVim이 제안한 상태로가 설정 되면 파일을 Vim에로드 할 때마다 파일 autotab이 호출되고 Vim 설정 출력 autotab이 :set명령에 전달됩니다 .
autotab파일에서 수천 줄을 읽고 분석 한 다음 expandtab, tabstop및 shiftwidth매개 변수에 대한 설정을 결정합니다 .
파일이 하드 탭을 사용하는지 아니면 들여 쓰기에 공백 만 사용하는지 파악하고 들여 쓰기 크기를 파악합니다. 파일이 탭으로 들여 쓰기되면 다양한 탭 크기를 사용하여 파일 샘플을 렌더링하고 내부 요소의 줄 단위 정렬과 같은 휴리스틱 스에 따라 판단하여 올바른 탭 크기를 파악합니다.
몇 년 전에 알고리즘 조정을 중단 할만큼 충분히 잘 작동합니다. 혼란스러워지면 거의 항상 파일에 여러 규칙을 동시에 사용하는 것과 같은 서식 문제가 있기 때문입니다.
또한 파일 유형에 대해 "무관"하며 다양한 언어에서 잘 작동합니다. 나는 C뿐만 아니라 쉘 스크립트, Lisp, Makefiles, HTML 등을 사용합니다.
예를 들어, C 파일 case에서, switch명령문의 레이블 이 들여 쓰기되었는지 여부 또는 래핑 된 함수 인수 목록이 단순히 들여 쓰기되었는지 또는 인수 목록의 여는 괄호. Vim에는 그런 종류의 설정이 있으므로 스타일을 분석하고 해당 매개 변수를 출력하도록 프로그램을 확장 할 수 있습니다.
거의 동일한 문제를 찾고 Sauce 플러그인도 발견했습니다 : http://www.vim.org/scripts/script.php?script_id=3992
주장 :
Sauce는 여러 vimrc 파일을위한 경량 관리자로, 다양한 환경에 대해 다른 설정을로드하는 데 사용할 수 있습니다. 간단히 말해서, 다양한 vim 설정 파일을 많이 유지하고 필요할 때 필요한 파일 만로드 할 수 있습니다.
사용자가 파일 시스템에 도트 파일을 뿌릴 것으로 기대하는 대신 데이터 디렉토리에 모든 구성을 유지한다는 것이 특히 흥미 롭습니다. 이것은 종종 개인적인 취향의 미터입니다.
그래도 아직 테스트하지 않았습니다.
구성을 전환 하는 데 stow 를 사용할 수 있습니다 (.vimrc ).
설치 stow:
$ apt install stow
각 구성에 대해 여러 디렉터리를 만듭니다.
~$ ls -d ~/dotfiles/vim*
vim-all vim-webdev vim-go
다른 것을 넣으십시오 .vimrc.
$ find ~/dotfiles -name .vimrc
/home/username/vim-golang/.vimrc
/home/username/vim-webdev/.vimrc
/home/username/vim-all/.vimrc
이제 다음 명령으로 vim-golang 구성을 인스턴스화 할 수 있습니다 (dotfiles 디렉토리 내에서 실행해야 함).
~$ cd ~/dotfiles
dotfiles$ stow -v vim-golang
LINK: .vimrc => dotfiles/vim-golang/.vimrc
이제 연결되었습니다.
$ cd ~ && ls -l .vimrc
.vimrc -> dotfiles/vim-golang/.vimrc
구성을 전환해야하는 경우 다시 설정 stow하십시오.
~$ cd dotfiles
dotfiles$ stow -v -D vim-golang
UNLINK: .vimrc
dotfiles$ stow -v vim-webdev
LINK: .vimrc => dotfiles/vim-webdev/.vimrc
$ cd ~ && ls -l .vimrc
.vimrc -> dotfiles/vim-webdev/.vimrc
여기에 대한 더 많은 정보 : GNU stow로 dotfile 관리하기
장점 : 매우 간단하고 vim 플러그인 종속성이 없으며 모든 도트 파일을 관리하는 데 사용할 수 있습니다..vimrc .
단점 : 구성은 서로 독립적이므로 각각을 개별적으로 관리 / 업데이트해야합니다 (구성을 너무 자주 전환 / 업데이트하지 않으면 문제가되지 않습니다).