Git 변경 사항을 커밋할 때 첫 번째 줄 끝에서 삽입 모드로 Vim을 시작하는 방법은 무엇입니까?

Git 변경 사항을 커밋할 때 첫 번째 줄 끝에서 삽입 모드로 Vim을 시작하는 방법은 무엇입니까?

Vim을 항상으로 설정하는 가장 좋은 방법은 무엇입니까첫 번째 줄 끝에 커서가 있는 삽입 모드(커밋 메시지 템플릿 고려) 런타임 git commit? 이것은 기본적으로 ggA모든 언론과 동일한 작업을 수행합니다. 이상적으로 이는 Vim 구성이어야 합니다(아마도~/.vim/after/ftplugin/gitcommit.vim), 내가 의존하기 때문에$VISUAL모든 것에 대해 개별적으로 편집기를 구성하는 대신.


이것은 거의 작동합니다.

call feedkeys('ggA', 'int')

그러나 실행할 때 echo 'some text' >/tmp/COMMIT_EDITMSG && vim -Nu NONE --cmd 'filetype plugin on' /tmp/COMMIT_EDITMSG키를 누를 때까지 커서는 상태 줄에 있습니다.

Vim에 커서가 없습니다.


1 | startinsert!작동 echo 'some text' >/tmp/COMMIT_EDITMSG && vim -Nu NONE --cmd 'filetype plugin on' /tmp/COMMIT_EDITMSG하지만 실행하면 git commit -t /tmp/COMMIT_EDITMSG완전히 중단됩니다. 커밋 메시지가 표시되지 않고 커밋 템플릿이 상태 줄 아래에 표시됩니다.

<code>git commit</code> 손상된 보기

오른쪽 화살표를 누르면 커밋 메시지와 커서가 표시되고 편집기는 삽입 모드에 있지만 커서는 줄 끝이 아닌 두 번째 문자에 있습니다.

커서를 이동한 후 <code>git commit</code>

Vim에게 버퍼의 실제 내용을 표시하도록 구성에 뭔가를 추가해야 합니까?

답변1

Vim Wikia에 제공된 자동 명령 중 하나를 적용하면 이것이 git commit -t /tmp/COMMIT_EDITMSG나에게 잘 작동하는 것 같습니다.

" ~/.vim/ftplugin/gitcommit.vim
au! VimEnter COMMIT_EDITMSG exec 'norm gg' | startinsert!

동일 하고 라인 인쇄에 약간의 지연이 있기 때문에 exec 'norm gg' |이것을 사용합니다 .1 |:1 |:1p |

답변2

명령을 사용하여 git에게 vim을 호출하도록 지시할 수 있습니다 startinsert. 이것을 ~/.bashrc파일에 넣으세요:

export GIT_EDITOR="vim -c 'startinsert'"

그러나 병합을 커밋해야 할 때 Esc 키를 눌러야 하는 것은 성가실 수 있다는 점에 유의하세요. 병합에 대한 커밋 메시지가 이미 생성되어 있기 때문입니다.

관련 정보