yiskw note

機械学習やプログラミングについて気まぐれで書きます

fzfでCTRL+Rなどのショートカットが機能しない

概要

yiskw713.hatenablog.com

私はこちらの記事で紹介したコマンドライン曖昧検索ツールであるfzfを愛用しているのですが,
ふとある日を境にCTRL+RCTRL+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】wemake-python-styleguideでコードを厳しくチェックする

概要

Pythonのlinterであるflake8を用いることで,コードの品質を担保するために静的解析を実施することができますが,
今回はそのflake8のプラグインであるwemake-python-styleguideというものを使ってみました.

公式ドキュメントによると,

Welcome to the strictest and most opinionated Python linter ever.

とあり,かなり厳しくコードを解析してくれるツールとなっています.
今回はその使い方や設定について,備忘録としてこちらに残しておきます.

続きを読む

【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ファイルを指定することで,モジュールをスクリプトとして実行した際の挙動を定義することができます.

使い所

architecting.hateblo.jp

こちらの記事が参考になりました.
unittestなどのようなパッケージでは,unittestをライブラリとしても,CLIツールとしても使用することが可能です.
このときに,ライブラリとしての挙動とCLIツールとしての挙動を分離するような際に,__main__.pyを定義すると便利とのことでした.

参考