標準愚痴出力

個人的なIT作業ログです。もしかしたら一般的に参考になることが書いているかもしれません(弱気

Git 互換DVCS、jj(jujutsu) でのテキストエディター指定における空白の扱い

基本は

に記載のとおり

  1. 環境変数 JJ_EDITOR
  2. 設定ファイルの ui.editor
  3. 環境変数 VISUAL
  4. 環境変数 EDITOR

の順で参照される。この時、1,3,4 について空白は引数の絶対的な区切リ文字として機能する。つまり

  • set "EDITOR=C:/Program Files/Notepad++/notepad++.exe" → NG
  • set "EDITOR=\"C:/Program Files/Notepad++/notepad++.exe\"" → NG
  • set "EDITOR=""C:/Program Files/Notepad++/notepad++.exe""" → NG
  • set "EDITOR=^"C:/Program Files/Notepad++/notepad++.exe^"" → NG
  • set "EDITOR=notepad++.exe" → OK (%PATH% にディレクトリが登録されている場合)
  • set "EDITOR=C:\PROGRA~1\Notepad++/notepad++.exe\"" → OK
  • set "JJ_EDITOR=C:\PROGRA~1\vim\vim91\vim.exe --literal" → OK

となるようだ。なお、C:\PROGRA~1C:\Program Files のショートファイル名(DOS互換の8.3形式のファイル名) だが、常にそうとは限らない。

2についても単純な文字列として設定する場合は 1,3,4 と同じ扱いになるが、配列として定義する場合のみ、空白を設定可能になる。つまり、以前

で記載した書き方になる。

[ui]
editor = [ "C:/Program Files/vim/vim91/vim.exe", "--literal" ]

ただし、この設定は jj config edit --repo でしか設定できず、jj config get ui.editor で現在の設定内容を確認できなくなるという制限があるようだ。うーん

ちなみに Git も

$ set "GIT_EDITOR=C:/Program Files/Vim/vim91/vim.exe"

$ git commit --amend
hint: Waiting for your editor to close the file... C:/Program Files/Vim/vim91/vim.exe: line 1: C:/Program: No such file or directory
error: There was a problem with the editor 'C:/Program Files/Vim/vim91/vim.exe'.
Please supply the message using either -m or -F option.

おんなじだった。