はじめに
Markdownで書いたメモを、fzfを使って見出し単位で検索するコマンドfcqs (以前はfcsという名前でした) を書きました。fzfで見出しを検索すると、その見出しから次の見出しまでの内容がプレビューで表示されます。
コマンドラインやショートカットキーなどちょっとしたことについて、繰り返しウェブで検索しさらにページ内から探す手間を、省く助けとして使えます。
インストール
fzf をインストールします。
fcqsをGitHubからダウンロードして展開します。コマンド本体はfcqs-cli
というファイルです。
fcqs-cli
をパスの通ったディレクトリに配置します。例えばLinuxなら以下のようにします。
install fcqs-cli ~/.local/bin/
Linuxでbashを使う場合、.bashrc
に以下を追記しfcqsという関数を定義します。メモの内容をコピーする機能を使うためには xclip をインストールしてください。
以下はメモの編集にvimを使う場合です。VS codeを使う例もあります。
export VISUAL="vim" # your Unix Editors (Emacs, nano, gedit, etc.)
fcqs() {
local title=$(fcqs-cli | \
fzf --preview "fcqs-cli {}" \
--bind "ctrl-y:execute-silent(fcqs-cli {} | xclip -selection c),ctrl-o:execute-silent(fcqs-cli -u {} | xargs xdg-open),ctrl-e:execute-silent(fcqs-cli -l {} | awk '{printf \"+%s %s\n\",\$2,\$1}' | xargs -o $VISUAL > /dev/tty)+abort")
fcqs-cli "$title"
local command=$(fcqs-cli -c "$title")
READLINE_LINE="${READLINE_LINE:0:$READLINE_POINT}${command}${READLINE_LINE:$READLINE_POINT}"
READLINE_POINT=$(( READLINE_POINT + ${#command} ))
}
# You can customize the key binding
bind -x '"\C-o":fcqs'
メモの仕様
検索対象となるメモファイルは、デフォルトでは~/fcnotes.md
です。検索対象となるメモファイルは、FCQS_NOTES_FILE
という環境変数にファイルのパスを設定することで変更できます。
メモの形式として必要なことは、見出しをMarkdown形式で書くだけです。
# title1
contents1
# title2
contens2
利用方法
コマンドラインでCtrol+o
を入力します。このキーバインドは先程の ~/.bashrc に記述したキーバインドを変更することでカスタマイズできます。
fzfでMarkdownの見出しが表示されますので、検索しつつプレビューで内容を見ることができます。また以下のキーバインドが利用可能です。
- Enterキー: 選択したメモを標準出力に出力します。もしそのメモにコードブロックに囲まれたシェルコマンドが書かれている場合、その最初のブロックのシェルコマンドをコマンドラインにペーストします。
- Ctrl+y: 選択したメモをクリップボードにコピーします。
- Ctrl+o: 選択したメモにURLが含まれる場合、最初のURLをブラウザ等で開きます。
- Ctrl+e: 選択したメモをエディタで開きます。
その他
- 検索の対象は見出しのみです。
- 見出しの階層やそれに伴う構造は無視します。単純に見出しと見出しの間にある内容を表示します。
- 内容をもたない見出し(次の見出しまでにコンテンツがない)は一覧に表示しません。
- 同じ見出しが複数ある場合は、一つにまとめます。
- 見出しの行末空白は無視します。
- メモの内容に連続する空行があれば1行にまとめます。それ以外の整形は行いません。
- メモの中身が多いと、メモの内容を検索する必要が出てきます。メモの内容は短くしておくのがよいです。