답변:
.vimrc에 배치하는 vim 자동 명령을 사용합니다. 이 명령은 먼저 git 디렉토리에서 작업하고 있는지 확인합니다 (현재 디렉토리 또는 .git 디렉토리의 존재 여부를 확인하여 git rev-parse). git -a -m %이전에 추가 된 파일 만 준비되고 커밋되도록 사용합니다 .
autocmd BufWritePost * execute '! if [ -d .git ] || git rev-parse --git-dir > /dev/null 2>&1 ; then git add % ; git commit -m %; fi'
autocmd BufWritePost * execute '! if [ -d .git ] || git rev-parse --git-dir > /dev/null 2>&1 ; then git add % ; git commit -m %; fi'A로부터, SO 답변
매크로 또는 명령 재 매핑을 통해이 작업을 수행 할 수 있습니다.
( /programming/117150/can-i-re-map-commands-in-vim 확인 )
그래도 좋은 옵션인지 잘 모르겠습니다. 나는 현재 자식에 능숙하지 않으며 때로는 svn과 다르다는 것을 알고 있습니다. 그러나 나는 svn 으로이 자동 커밋을하지 않을 것입니다. 커밋은 의미가 있어야하며 정기적으로 시간을 절약 할 수는 없습니다.
파일을 작업 한 것이 아니라 함수를 추가하고 버그를 수정했기 때문에 일반적으로 커밋합니다. 컴파일되지 않은 프로젝트 또는 완료되지 않은 기능으로 끝나지 않습니다.
나는이 질문이 오래되었다는 것을 알고 있으며 이것이 명백한 자체 판촉이지만 특정 Vim autocmd이벤트 후에 특정 쉘 스크립트가 실행되도록 Vim 플러그인을 작성 했습니다. 예를 들어, 이름 .bufwritepost.vimhook.sh이 지정된 스크립트 는 BufWritePost명령이 실행될 때마다 (동기식으로) 실행 됩니다. 그런 다음 해당 스크립트 내에서 git commit을 수행하기 위해 원하는 로직을 쉽게 포함시킬 수 있습니다. 플러그인은 이러한 스크립트의 특정 명명 규칙을 가정하고 특정 이름과 일치하거나 특정 확장자를 가진 파일에서만 트리거하는 "후크"스크립트를 지원합니다.
자세한 내용 : https://github.com/ahw/vim-hooks
이 문제에 대한 의견을보고 싶습니다.
나는이 vimrc.vim(자식 저장소에 $VIMCONF부트 스트랩의 .vimrc로) 및 매핑 <Leader>ve새 탭에서의 vimrc를 엽니 다 ( "정력 편집"). 이것은 현재 작업 디렉토리에 영향을 미치지 않습니다.
따라서 vimrc.vimvim git 저장소 외부의 다른 디렉토리에서 시작한 vim에서 편집하면 Nick Edwards가 논의한 접근 방식이 실패합니다. 내 핵은 다음과 같습니다 (Windows 및 Linux 용)
if has('win32')
" The git command has to be passed to git. So we need to call bash.exe.
autocmd BufEnter *vimrc.vim silent! lcd %:p:h
autocmd BufWritePost *vimrc.vim if expand('<amatch>') =~ substitute(expand('$VIMCONF\vimrc.vim'), '\', '/', "g") | execute '! git add % & git commit -m %' | endif
else " Linux
autocmd BufWritePost *vimrc.vim
\ if expand('<amatch>') =~ expand($VIMCONF)."/vimrc.vim" |
\ let tempdir = getcwd() | execute 'cd' fnameescape(expand('<amatch>:h')) |
\ execute '! if git rev-parse --git-dir > /dev/null 2>&1 ; then git add % ; git commit -m % ; fi' |
\ execute 'cd' fnameescape(tempdir) |
\ endif
endif
설명:
git경로에 있어야한다 (즉 사용자가 입력 할 수 있어야 git <ENTER>에서 cmd.exe)tempdir노트:
|. 명령 중 하나라도 실패하면 체인이 중단됩니다. 여러 줄을 나누려면로 다음 줄을 시작하십시오 \.*.vim및expand($VIMCONF)."/ftplugin/"