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
に渡しているread
はIFS
の文字で読み込んだデータを分割する
- このスクリプトでは
<(command)
はcommand
の結果を標準出力に出すプロセス置換- https://linuxjm.osdn.jp/html/GNU_bash/man1/bash.1.html#lbBE
- このスクリプトでは
read
の標準入力にリダイレクトされる
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]}"