fzfでCTRL+Rなどのショートカットが機能しない
概要
私はこちらの記事で紹介したコマンドライン曖昧検索ツールであるfzfを愛用しているのですが,
ふとある日を境にCTRL+R
やCTRL+T
のようなショートカットが使えなくなってしまいました.
原因
こちらについて調査していたところ,どうやらFZF_DEFAULT_OPTS
に--preview
オプションを追加していたことが問題なようでした.
▽良くない設定例
# DO NOT USE THIS SETTING
export FZF_DEFAULT_OPTS="
--preview --height 40% --reverse --border=sharp --margin=0,1
--prompt=' ' --color=light
"
色々と設定をいじっていた際に,謝って--preview
を追加してしまったのが原因のようでした.
--preview
オプションついては,README.mdにも記載があり,以下とのことでした.
Since fzf is a general-purpose text filter rather than a file finder, it is not a good idea to add --preview option to your $FZF_DEFAULT_OPTS.
解決方法
そのため各種設定を以下のように変更することで,無事機能しました.
export FZF_DEFAULT_COMMAND='rg --files --hidden --follow --glob "!**/.git/*"' export FZF_DEFAULT_OPTS=" --height 40% --reverse --border=sharp --margin=0,1 --prompt=' ' --color=light " # for finding files in current directories export FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND" export FZF_CTRL_T_OPTS=" --preview 'bat --color=always --style=header,grid {}' --preview-window=right:60% " # Ref: https://wonderwall.hatenablog.com/entry/2017/10/06/063000 # コマンドが長すぎる時に?を押すと,全コマンドが見れる export FZF_CTRL_R_OPTS=" --preview 'echo {}' --preview-window down:3:hidden:wrap --bind '?:toggle-preview' "
参考
【Python】__main__.pyを理解する
__main__.py
とは
Pythonでは__main__.py
というファイルを定義することで,
python -m <MODULE_NAME>
を実行した際の挙動を定義できるようです.
※ -m
オプションはモジュールをスクリプトとして実行するオプション
例えば以下の例を見てみます.
ディレクトリ構造
. ├── mod/ │ ├── __init__.py │ └── __main__.py └── README.md
mod/__main__.py
の中身
if __name__ == "__main__": print("running __main__.py in mod.")
このとき以下を実行すると,__main__.py
の中身が実行されていることが確認できます.
$ python -m mod # もしくは python mod でも良い running __main__.py in mod.
このように,__main__.py
ファイルを指定することで,モジュールをスクリプトとして実行した際の挙動を定義することができます.
使い所
こちらの記事が参考になりました.
unittest
などのようなパッケージでは,unittest
をライブラリとしても,CLIツールとしても使用することが可能です.
このときに,ライブラリとしての挙動とCLIツールとしての挙動を分離するような際に,__main__.py
を定義すると便利とのことでした.