nesheep5's blog

子持ちWebエンジニアのブログ。プログラミング・仕事効率化・健康・子育て etc...

vim: fzf.vimでGFilesコマンドが使えなくなる問題

先日、fzf.vimGFilesコマンドが使えない問題に悩んでいたのですが、無事解決したのでメモ。
かなりニッチな問題ですが、予想外の箇所が影響しておりハマったので共有しておきます。

問題:fzf.vimでGFilesコマンドでエラー

GFilesコマンドは、Gitで管理されたファイル(git ls-files)を対象にあいまい検索を行えるコマンドです。
このコマンドを実行したところ、エラーとなってしまいました。

実行コマンド

:GFiles

コマンド実行結果

function fzf#vim#gitfiles[6]..<SNR>82_fzf[18]..fzf#run[64]..<SNR>46_execute_term[73]..<SNR>46_dopopd の処理中にエラーが検出されました:
行   20:
E716: 辞書型にキーが存在しません: dir && (!&autochdir || w:fzf_pushd.bufname ==# bufname(''))
E15: 無効な式です: s:fzf_getcwd() ==# w:fzf_pushd.dir && (!&autochdir || w:fzf_pushd.bufname ==# bufname(''))
function fzf#vim#gitfiles の処理中にエラーが検出されました:
行    6:
E171: :endif がありません
続けるにはENTERを押すかコマンドを入力してください

原因:config.fish で echo を使用しているとエラーが発生

色々検索したところ、本家のissues に同事象が記載されていました。 github.com

以下、引用

Everything works correctly, except :GFiles. When I run :GFiles from a git repo, I get:

Error detected while processing function fzf#vim#gitfiles[6]..103_fzf[18]..fzf#run[64]..27_execute_term[73]..27_dopopd:
line 20:
E716: Key not present in Dictionary: dir
E15: Invalid expression: s:fzf_getcwd() ==# w:fzf_pushd.dir
Error detected while processing function fzf#vim#gitfiles:
line 6:
E171: Missing :endif


has any echo in your fish config?
remove that echo may be resolve the problem

shellにfishを利用している
かつ
~/.config/fish/config.fish内でechoコマンドを利用している
場合にこの事象が再現する旨のコメントがあり、まさにその状況でした。

対応方法:config.fish で echo コマンドを削除

執筆時点(2019/09/10)では issue Open の状態でした。

暫定対処として~/.config/fish/config.fishecho コマンド記述部を削除したところ上手く動作しました。

学び

まずは本家のissueを確認

エラーとなったとき、fzf vim GFiles errorなどで雑にググったのですが、似てるけど別の問題がヒットし、なかなかこのissueにたどり着けませんでした。
エラーのときは「まずは本家のissueを確認する」を徹底しよう、という学びを得ました。苦笑

Google の言語設定を英語にしておく

Googleでの検索時、言語を日本語で検索していたのですが、英語に変更すると検索にヒットする記事が変わり、求めていた記事がトップに表示されました。 技術情報をを検索するときは言語設定を英語にしておくと良いかもしれません。

日本語で検索した場合

f:id:nesheep5:20190913102200p:plain

英語で検索した場合

f:id:nesheep5:20190913102223p:plain

参考:再現時の各Version

mac OS Mojave

⟩ sw_vers
ProductName:    Mac OS X
ProductVersion: 10.14.6
BuildVersion:   18G95

fish

⟩ fish -v
fish, version 3.0.2

neovim

⟩ nvim -v
NVIM v0.3.8
Build type: Release
LuaJIT 2.0.5
Compilation: /usr/local/Homebrew/Library/Homebrew/shims/mac/super/clang -Wconversion -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1 -DNDEBUG -DMIN_LOG_LEVEL=3 -Wall -Wextra -pedantic -Wno-unused-parameter -Wstrict-prototypes -std=gnu99 -Wimplicit-fallthrough -Wvla -fstack-protector-strong -fdiagnostics-color=auto -DINCLUDE_GENERATED_DECLARATIONS -D_GNU_SOURCE -DNVIM_MSGPACK_HAS_FLOAT32 -DNVIM_UNIBI_HAS_VAR_FROM -I/tmp/neovim-20190704-11886-1ukicoc/neovim-0.3.8/build/config -I/tmp/neovim-20190704-11886-1ukicoc/neovim-0.3.8/src -I/usr/local/include -I/usr/local/opt/gettext/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/usr/include -I/tmp/neovim-20190704-11886-1ukicoc/neovim-0.3.8/build/src/nvim/auto -I/tmp/neovim-20190704-11886-1ukicoc/neovim-0.3.8/build/include
Compiled by brew@Mojave.local

Features: +acl +iconv +jemalloc +tui
See ":help feature-compile"

      システム vimrc: "$VIM/sysinit.vim"
       省略時の $VIM: "/usr/local/Cellar/neovim/0.3.8/share/nvim"

Run :checkhealth for more info