MENU

検索できるメモを運用する

tldr 的なものを運用する。

https://github.com/tldr-pages/tldr

目次

fzf + ripgrep + bat + tmux でやる

https://github.com/junegunn/fzf/blob/master/ADVANCED.md#ripgrep-integration

検索版(クエリは不変)

https://github.com/junegunn/fzf/blob/master/ADVANCED.md#using-fzf-as-the-secondary-filter

上記ページのスクリプトを、検索後の表示を vim ではなく tmux popup で bat で表示するように変えた。

#!/usr/bin/env bash

IFS=: read -ra selected < <(
  rg --color=always --line-number --no-heading --smart-case "${*:-}" |
    fzf --ansi \
        --color "hl:-1:underline,hl+:-1:underline:reverse" \
        --delimiter : \
        --preview 'bat --color=always {1} --highlight-line {2}' \
        --preview-window 'up,60%,border-bottom,+{2}+3/3,~3'
)
[ -n "${selected[0]}" ] && tmux popup -w80% -h80% -d '#{pane_current_path}' "bat --color=always ${selected[0]} --highlight-line ${selected[1]}"

学んだこと

  • IFS は区切り文字を表すbashのシェル変数
    • このスクリプトでは : に設定している
    • rg コマンドの出力が {ファイルパス}:{マッチした行番号}: となっており、それを組み込みコマンド read に渡している
    • readIFS の文字で読み込んだデータを分割する
  • <(command)command の結果を標準出力に出すプロセス置換
  • read のオプション
    • -r はバックスラッシュ \ のエスケープを無効にする
    • -a は単語を配列に入れるようにする
  • ${*:-} は位置パラメータ $*:- でのパラメータ展開
    • $* は引数すべてを表す位置パラメータ
    • :- は変数が空文字の場合- の後の値に展開する
      • 今回は空文字に展開される

インタラクティブ版

https://github.com/junegunn/fzf/blob/master/ADVANCED.md#using-fzf-as-interative-ripgrep-launcher

こっちのほうが検索としては使い勝手はよさそうだった。

#!/usr/bin/env bash

RG_PREFIX="rg --column --line-number --no-heading --color=always --smart-case "
INITIAL_QUERY="${*:-}"
IFS=: read -ra selected < <(
  FZF_DEFAULT_COMMAND="$RG_PREFIX $(printf %q "$INITIAL_QUERY")" \
  fzf --ansi \
      --disabled --query "$INITIAL_QUERY" \
      --bind "change:reload:sleep 0.1; $RG_PREFIX {q} || true" \
      --delimiter : \
      --preview 'bat --color=always {1} --highlight-line {2}' \
      --preview-window 'up,60%,border-bottom,+{2}+3/3,~3'
)
[ -n "${selected[0]}" ] && tmux popup -w80% -h80% -d '#{pane_current_path}' "bat --color=always ${selected[0]} --highlight-line ${selected[1]}"
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次