0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

fzfでメモを検索

Last updated at Posted at 2023-09-07

はじめに

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を使う例もあります。

.bashrc
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行にまとめます。それ以外の整形は行いません。
  • メモの中身が多いと、メモの内容を検索する必要が出てきます。メモの内容は短くしておくのがよいです。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?