다시 시작하지 않고 vim 구성을 적용 할 수 있습니까?


80

.vimrcVim을 다시 시작하지 않고 Vim에서 파일 을 편집 하고 적용하고 싶습니다 .

답변:


80

예, :so %.vimrc를 편집하는 동안 명령을 사용하십시오 .

vim이 구성을 자동으로 다시로드하도록하려면 다음 명령을 추가해야합니다.

augroup myvimrchooks
    au!
    autocmd bufwritepost .vimrc source $MYVIMRC
augroup END

자동 명령 그룹은 구성을 여러 번 저장하는 경우 "지수"다시로드를 방지하기 위해 여기에 있습니다.


gvimrc파일이 _vimrc또는 라는 vimrc경우 또는 .vimrc다른 디렉토리에서 라는 파일을 편집하는 경우 에는 작동하지 않습니다 . 이러한 문제를 해결하려면 내 대답을 참조하십시오.
Tom Hale 2016 년

나를 위해 그것은 같은 오류로 실패합니다 Function Inc already exist, add ! to replace it.
Hi-Angel

이 맥락에서 augroup은 어떤 기능을합니까? 간단하게 다시 작성할 수 autocmd! bufwritepost .vimrc source ~/.vimrc없습니까? 어떤 이유로 그룹이 필요하더라도 줄 3을 autocmd!? 로 시작하도록 다시 작성하면 줄 2를 생략 할 수 없습니다 .
John Karahalis

46

Mac / Windows / Linux에서 실행하는 경우 플랫폼 간 호환이 가능한 버전은 다음과 gvimrc같습니다.

augroup myvimrc
    au!
    au BufWritePost .vimrc,_vimrc,vimrc,.gvimrc,_gvimrc,gvimrc so $MYVIMRC | if has('gui_running') | so $MYGVIMRC | endif
augroup END

autocmd는 모든 잠재적 *vimrc파일을 감시하고 하나가 변경되면 vimrc파일을 다시로드 한 다음 gvimrcGUI가 실행 중인지 확인합니다.


5
GUI Vim이 시작될 때 설정됩니다. 참조:help gvimrc
matpie

3
환상적입니다. 감사합니다. 이렇게하면 방금 저지른 뇌의 방귀를 피하십시오 ... gvim을 열고 이것을 vimrc에 추가 한 다음 작동하는지 확인했습니다. 아니요 ... 20 분 후에 AUTOCMD가 추가 된 후 파일을 소싱하는 것을 잊었습니다. 물론 일단 그렇게하면 모든 것이 작동했습니다. 저에게는 너무 메타 였고 정신적 인 "스택 오버플로"가있었습니다.
Charlie Flowers

3
나는 이것을 사용했지만 $GVIMRC때로는 존재하지 않기 때문에 존재 하는지 확인합니다 . if has('gui_running') && filereadable($MYGVIMRC)
k107 2014

처음에 저에게 이상한 점은 이미 설정된 내용을 유지하면서 단순히 vimrc 파일을 다시로드한다는 것입니다. 예를 들어, 처음에 vimrc에 "set number"가 있고 그 줄에 주석을 달고 문서를 저장하면 여전히 왼쪽에 번호가 있습니다. 그러나 실제로 의미가 있습니다 ... 무언가를 비활성화하려면 수동으로해야합니다.
piponazo 2015

1
au BufWritePost $MYVIMRC또는 사용하지 않을 이유가 au BufWritePost $MYVIMRC,$MYGVIMRC있습니까?
phs


8
" Quickly edit/reload this configuration file
nnoremap gev :e $MYVIMRC<CR>
nnoremap gsv :so $MYVIMRC<CR>

저장시 자동으로 다시로드 하려면 에 다음을 추가하십시오 $MYVIMRC.

if has ('autocmd') " Remain compatible with earlier versions
 augroup vimrc     " Source vim configuration upon save
    autocmd! BufWritePost $MYVIMRC source % | echom "Reloaded " . $MYVIMRC | redraw
    autocmd! BufWritePost $MYGVIMRC if has('gui_running') | so % | echom "Reloaded " . $MYGVIMRC | endif | redraw
  augroup END
endif " has autocmd

마지막으로 다음을 입력합니다.

:so %

다음에를 저장하면 vimrc자동으로 다시로드됩니다.

풍모:

  • 사용자에게 무슨 일이 일어 났는지 알려줍니다 (에 로그인 함 :messages).
  • 구성 파일의 다양한 이름을 처리합니다.
  • 실제 구성 파일과 만 일치하는지 확인합니다 (다른 디렉토리의 복사본 또는 fugitive://차이점 무시 ).
  • 사용하면 오류가 발생하지 않습니다. vim-tiny

물론 자동 재로드는 vimrcvim에서 편집하는 경우에만 발생합니다 .


이것은 vim내가 편집중인 동일한 인스턴스에서 파일이 모두 열려있을 때만 작동하는 것 같습니다 $MYVIMRC. 예를 들어, 다른 터미널에있는 경우에도 수동으로 $MYVIMRC. 이 문제를 해결할 방법이 있습니까?
Zoey Hewll

1
내가 아는 것은 아닙니다-이것은 현재가 vim파일을 쓸 때 포착하여 작동 합니다. 파일 자체에서 mtime을 모니터링 할 수 있지만 비동기 폴링없이 수행하는 방법을 잘 모르겠습니다.
Tom Hale

1

autocmd! bufwritepost _vimrc 소스 %

저장하면 _vimrc 파일의 모든 구성이 자동으로 다시로드됩니다.

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