명령 또는 로컬 vimrc 파일을 사용하여 여러 vim 구성간에 전환하는 방법은 무엇입니까?
저는 여러 그룹에서 작업하며 각 그룹에는 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
You can also put autocommands in your .vimrc
which set specific options on a per-path basis.
au BufRead,BufNewFile /path/to/project1/* setl sw=4 et
au BufRead,BufNewFile /path/to/project2/* setl sw=3 noet
Plugin doing the right thing: http://www.vim.org/scripts/script.php?script_id=441
“This plugin searches for local vimrc files in the filesystem tree of the currently opened file. By default it searches for all ".lvimrc" files from the file's directory up to the root directory and loads them in reverse order. The filename and amount of loaded files is customizable through global variables.”
Assuming your fellow developers won't complain about it, you can always add vim settings to each file in the comments.
/*
* vim:ts=4:sw=4:expandtab:...
*/
int main(int argc, char **argv)
{
...
I created an open-sourced tool for just this purpose. Forget the headers, scanning, configurations, and local vimrc files.
Try swim.
Swim
swim
is a quick tool for switching vimrc files and creating convenient aliases. Here's a short usage list. See the Github repo for a walkthrough gif and download instructions:
Usage
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
Read More
https://github.com/dawsonbotsford/swim
After trying out the localvimrc plugin suggested by the previous poster, I very much like having non-futzy per-project control over vim settings.
It does ask confirmation before loading a .lvimrc file by default but there is a setting to automatically load .lvimrc files. Some might see this as a security hole, but it works as advertised.
I chose to .gitignore the .lvimrc files. Alternatively you can check them in as a form of shared settings (tab/space expansion, tabstops, other project-specific settings).
As mentioned by sledge the usage of that plug-in is the best option I have seen and use. jerseyboy commented that the utility recommended ask for confirmation before loading (ie. after opening every file). To avoid this just set at your main .vimrc
the list of local .lvimrc
files:
let g:localvimrc_whitelist='/development/kernel/.lvimrc'
Here's a variation on jamessan's
function! ConditionalLoad()
let cwd = getcwd()
if getcwd() =~ $HOME . "/src/mobile"
so $HOME/.vim.mobile
endif
endfunction
autocmd VimEnter * call ConditionalLoad()
I will frequently launch vi without a specific file that I'm jumping to so this enables loading config conditionally based on the current working directory. Downside is that the config isn't applied based on file but off of working directory.
Looking for mostly the same issue I also found the Sauce plug-in: http://www.vim.org/scripts/script.php?script_id=3992
It claims:
Sauce is a lightweight manager for multiple vimrc files, which can be used to load different settings for different environments. In short, you can maintain lots of different vim settings files and only load the one(s) you need when you need them.
I find it particularly interesting that it keeps it configuration all in its data directory instead of expecting the user to sprinkle dotfiles across the filesystem. This though often rather a metter of personal taste.
I have yet to test it though.
'programing' 카테고리의 다른 글
git status에서 "치명적 : git 저장소 (또는 상위 디렉토리)가 아님" (0) | 2020.10.07 |
---|---|
Dockerfile if else 조건 외부 인수 포함 (0) | 2020.10.07 |
실행중인 프로그램에서 1 초간 기다리십시오. (0) | 2020.10.07 |
Glide 라이브러리를 사용하여 이미지로드 완료시 표시되는 진행률 표시 줄의 가시성 설정 (0) | 2020.10.06 |
정적 생성자는 어떻게 작동합니까? (0) | 2020.10.06 |