tsuyoshicho / vim-pass

Vim password-store API
https://tsuyoshicho.github.io/vim-pass/
MIT License
3 stars 0 forks source link

Error: vim in windows cli startup error #12

Closed tsuyoshicho closed 5 years ago

tsuyoshicho commented 5 years ago

like git commit time

日本語メッセージ翻訳/監修: 村岡 太郎 <koron.kaoriya@gmail.com>
"<hoge>.git/COMMIT_EDITMSG" [unix] 33L, 934C
function pass#resolve_startup[9]..<SNR>4__resolve_startup の処理中にエラーが検出されました:
行    5:
E121: 未定義の変数です: d
function pass#resolve_startup[9]..<SNR>4__resolve_startup の処理中にエラーが検出されました:
行    5:
E121: 未定義の変数です: d
function pass#resolve_startup[9]..<SNR>4__resolve_startup の処理中にエラーが検出されました:
行    5:
E121: 未定義の変数です: d
function pass#resolve_startup[9]..<SNR>4__resolve_startup の処理中にエラーが検出されました:
行    5:
E121: 未定義の変数です: d
21 行 削除しました
".git/COMMIT_EDITMSG" [unix] 11L, 272C 書込み
tsuyoshicho commented 5 years ago

cli startup variable miss...?

tsuyoshicho commented 5 years ago

以下は成功 testvimrc.vim.txt

$ vim -u testvimrc.vim

そもそもgit時だけNGなのが不明、...WindowsはC:\windows\vim.batもしくはC:\Program Files\vim\vim81\vim.bat などを使うから?

tsuyoshicho commented 5 years ago

https://github.com/tsuyoshicho/vim-pass/commit/ffa5d7868dc1228ca026c5d5a46d584ad80bede5

日本語メッセージ翻訳/監修: 村岡 太郎 <koron.kaoriya@gmail.com>
"D:/repo/vim-pass/.git/COMMIT_EDITMSG" [unix] 27L, 817C
function pass#resolve_startup[1]..pass#startup#resolve[8]..<SNR>6_resolver の処理中にエラーが検出されました:
行    4:
E121: 未定義の変数です: d

1つだけになったのは、passphraseがキャッシュされるようになったから、と思われる

tsuyoshicho commented 5 years ago

以下を埋め込み

function! s:resolver(scope,set_variable, entry, keywords) abort
  let value = pass#get#entry_value(a:entry, a:keywords)

  if v:null == a:scope
    echomsg "resolver: entry" . a:entry . " var:" . a:set_variable . " value:" . value
    call execute('let ' . a:set_variable . '=' . "'" . value . "'")
  else
    let a:scope[a:set_variable] = value
  endif
endfunction
日本語メッセージ翻訳/監修: 村岡 太郎 <koron.kaoriya@gmail.com>
"D:/repo/vim-pass/.git/COMMIT_EDITMSG" [unix] 27L, 817C
resolver: entryDevelop/Pixela var:g:pixela_username value:
resolver: entryDevelop/Pixela var:g:pixela_token value:gpg: keyblock resource '/d/repo/vim-pass/C:\Users\9004050383\.gnupg/pubring.kbx': No such file or directory
function pass#resolve_startup[1]..pass#startup#resolve[8]..<SNR>9_resolver の処理中にエラーが検出されました:
行    5:
E121: 未定義の変数です: d

パス解決に問題がある

tsuyoshicho commented 5 years ago

いろいろ確認した結果

日本語メッセージ翻訳/監修: 村岡 太郎 <koron.kaoriya@gmail.com>
"D:/repo/vim-pass/.git/COMMIT_EDITMSG" [unix] 27L, 817C
pass cmd req ,id:95E823E6A359A5967AB30E0D55526347D4D76A9F,path:C:/Users/9004050383/.password-store/Develop/Pixela.gpg,pass:
pass cmd exec:gpg --no-verbose --quiet --batch --decrypt --local-user 95E823E6A359A5967AB30E0D55526347D4D76A9F --output - C:/Users/9004050383/.password-store/Develop/Pixela.gpg
pass env: which gpg:C:\Program Files\Git\usr\bin\gpg.EXE GNUPGHOME:C:\Users\9004050383\.gnupg
pass env: pwd:D:/repo/vim-pass
gnupg home:C:\Users\9004050383\.gnupg
resolver: entry:Develop/Pixela var:g:pixela_username value:
pass cmd req ,id:95E823E6A359A5967AB30E0D55526347D4D76A9F,path:C:/Users/9004050383/.password-store/Develop/Pixela.gpg,pass:
pass cmd exec:gpg --no-verbose --quiet --batch --decrypt --local-user 95E823E6A359A5967AB30E0D55526347D4D76A9F --output - C:/Users/9004050383/.password-store/Develop/Pixela.gpg
pass env: which gpg:C:\Program Files\Git\usr\bin\gpg.EXE GNUPGHOME:C:\Users\9004050383\.gnupg
pass env: pwd:D:/repo/vim-pass
gnupg home:C:\Users\9004050383\.gnupg
resolver: entry:Develop/Pixela var:g:pixela_token value:gpg: keyblock resource '/d/repo/vim-pass/C:\Users\9004050383\.gnupg/pubring.kbx': No such file or directory
function pass#resolve_startup[1]..pass#startup#resolve[8]..<SNR>9_resolver の処理中にエラーが検出されました:
行    6:
E121: 未定義の変数です: d
  1. git のコミットでgit の環境(msys)に切り替る
  2. その中でPATHの優先度変更がおきる(これでGitのgpgが使われる)
  3. ただしbashは起動しないので、bashrcでの修正は働かない(gpgのパスとGNUPGHOMEについてはここでケアしていた)
  4. その状態でGIT_EDITOR=c:\windows\vim.batによるnative vim起動
  5. 結果としてgpg(v2だがパス解決がMSYS)だけGit用が使われることになり不整合
  6. boo!

今となってはGit for Windowsにもgpg v2.2がついている(が、gpg-agentを考えると使いたくない) のだが、GNUPGHOMEとの整合性の問題もある...

環境をよく考えてみる

tsuyoshicho commented 5 years ago

問題発生は

Git for Windowsで(bashrcでケアせずに) gpg が使えない環境

だと発生する、といえる

tsuyoshicho commented 5 years ago

MSYS2_PATH_TYPE=inheritすると、gitのaliasの各コマンドの挙動が期待したものにならないのでまずい

一番確実なのは、gitのgpgを封印すること g:pass_gpg_pathをフルパスにする?

tsuyoshicho commented 5 years ago

このようにしてfix

[[plugins]]
repo = 'tsuyoshicho/vim-pass'
depends = ['ctrlp']
hook_add = '''
  let g:ctrlp_extensions = get(g:, 'ctrlp_extensions', [])
        \ + ['pass']

  " support windows
  let is_windows = has('win32') || has('win64') " later as historical ==|| has('win16') || has('win95')==
  let is_cygwin  = has('win32unix')

  if is_windows
    if !is_cygwin
      " Windows native not MSYS(cygwin) work
      " need native gpg (not /usr/bin/gpg)
      let gpg_32     = exepath('C:\Program Files (x86)\GnuPG\bin\gpg.exe')
      let gpg_native = exepath('C:\Program Files\GnuPG\bin\gpg.exe')

      if executable(gpg_32)
        let g:pass_gpg_path = gpg_32
      elseif executable(gpg_native)
        let g:pass_gpg_path = gpg_native
      endif
    endif
  endif
'''