web-dev-qa-db-ja.com

janusのアップデート後にvimを使用してgit commitメッセージが壊れる

Janus vimディストリビューションを更新した後、コミットメッセージにvimを使用すると問題が発生するようです。この最も良い例は、git pull他の誰かの変更を取得します。 vimエディターが表示されます。コミットメッセージを入力して、入力します :wq しかし、コミットが機能する代わりに、次のエラーメッセージが表示されます。

error: There was a problem with the editor 'vi'.
Not committing merge; use 'git commit' to complete the merge.

次に、手動でコミットする必要があります:(

どうすればgitをvimでうまく再生できますか?

49
Nat Ritmeyer

少しググると、答えは以下を実行することです:

git config --global core.editor $(which vim)
92
Nat Ritmeyer

Nat Ritmeyerが 正しい解決策 を提供しました。原因をお伝えします。

Steve Tookeの説明 と同様に、~/.vimrcを非表示にするか、gitへの完全なパスを使用するようにvimに明示的に指示すると、問題が解決します。しかし、彼は「問題の根本に行きたい」で終わります。

これを試して:

  1. git commitを起動して、vimエディターを開きます。
  2. <CTRL> + Zを押してプロセスを停止し、TTYに戻ります
  3. psを実行し、TTY(ttyコマンドで取得する番号)に注意してください...

    $ tty
    /dev/ttys005
    
    $ ps
      PID TTY           TIME CMD
    17547 ttys005    0:00.15 -bash
    65126 ttys005    0:00.02 git commit
    65127 ttys005    0:00.10 vi .git/COMMIT_EDITMSG
    
    $ which vi
    /usr/bin/vi
    
    $ ll /usr/bin/vi
    lrwxr-xr-x  1 root  wheel  3 Oct  3 17:40 /usr/bin/vi -> vim
    
    $ jobs
    [1]+  Stopped                 git commit
    
  4. fg %1(またはgit commitがリストされている停止したジョブ番号)でvimプロセスに戻ります。

シェルの出力からわかることは...

  1. 私はttys005を使用していました
  2. TTYでは、bashと呼ばれるgitおよびgitと呼ばれるvi
  3. viの絶対パスは/usr/bin/viです
  4. viコマンドは、vimへのシンボリックリンクです。
  5. <CTRL> + Zを呼び出すとgit commitコマンドが停止し、ジョブスタックで1位になりました。

したがって、viはvimと同じコマンドですか?!?!はい、しかしvimは、そのargv[0]viであり、次の場所で実行されることに気づきます- 互換モード 。これにより、.vimrcの内容によっては問題が発生する可能性があります。

最善の解決策はvimを使用するようにgitに指示することですが、私はあなたに仮定しないことをお勧めしますvimパスが他の全員と同じであること(多分brew install vimからインストールしたことでしょう)

git config --global core.editor $(which vim)
10
Bruno Bronosky

これは、.vimrcファイル内のプラグインまたは何かである可能性があります。コミットメッセージを編集するためにセーフモードでvimをロードする最良の方法は、以下を使用することです。

git config --global core.editor '/usr/bin/vim -f -u NONE'
4
Mr Wilde

リモートリポジトリからフェッチして別のブランチとマージするたびに、同じ問題に直面しました。

端末でこれを入力すると修正されました

git config --global core.editor $(which vim)

2
Lahiru

何らかの理由でgit config --global core.editor /usr/bin/vimが機能しない場合は、--globalフラグなしで試してください。 --globalフラグなしでしか機能しません。

0
Aakash Jog