コマンドラインで使える選択系ツールの中でも スクロールバーが使えるというsmenuというツールについて。
semnu
標準入力やファイルの内容を単語ごとや列ごとに分けて選択できるようにしてくれるツール。
いわゆる選択系ツール。 sentaku、peco、 fzfや前回の yank のようなことが出来ます。
と同じような使い方をすることも出来ます。
このツールの特徴的なところは、表示量の制限を超えた際にスクロールバーを表示してくれる、という点。
またそれ以外にもかなり機能は豊富で、ちょっと最初に使おうとすると逆に戸惑ってしまうかもしれません。
とりあえず最初にp-gen/smenu Wiki
のページを一通り見てみることと
man smenu
を見てみることをおすすめします。
インストール
インストールはソースをGitHubのレポジトリから取ってきてmake install
。
HomebrewにはFormulaは用意されてない1ので自分で用意しました。
homebrew-rcmdnkpac/smenu.rb at master · rcmdnk/homebrew-rcmdnkpac
Homebrewを使ってMacかLinuxで
$ brew install rcmdnk/rcmdnkpac/smenu
で入れることが出来ます。
使い方
smenu
コマンドに選択したい一覧を
標準入力として渡すかファイル名を引数として渡します。
注意として、以下の例では選択画面の表示だけ示していますが、実は他のツールと大きく違う点として 最後に選択後、そのままでは選択されたものが出力されません。
$ X=$(... | smenu)
$ ... | smenu | ...
のように変数に代入するか次のコマンドにパイプで標準入力として渡すかしない場合は 選択したものをそのまま標準出力に出力することはしないようになっています。
何もオプションを指定しないと単語区切りにになり、そのまま並べられてカーソルキーか VimライクなVimライクなH、J、K、Lの移動などで選択します。
-N
オプションを付けることで各単語の前に数字を付け、その番号を押すことでその単語に飛ぶことも出来るようになります。
-t <N>
オプションを指定することで横N列テーブル型に整形して出力することも出来ます。
-n <N>
は縦の表示行数でデフォルトは5になってます。
この行を超える出力がある場合には右側にスクロールバーがあらわれスクロールできるようになります。
デフォルトでは選択単位はスペース、タブ、改行によって区切られますが、行ごとに選択したい場合などは
-W $'\n'
としてオプションで区切り文字を指定します。
この前のyankのときのPATH
の中の各パスを選びたいのであれば-W :
を使えばOK。
また、入力の中からあらかじめ選べるものを絞ることもでき、
-i
で含めるもの、-e
で除外するものを指定します。
これらには正規表現も使えます。
manを見る限りではsed
で使えるような正規表現が使えるようです。
上の最後の例ではacfのいずれかの文字を含むものだけにしぼり、 除外されたものは青文字で表示され選択出来ないようになっています。
まとめ
簡単な使い方を説明しましたが、
これ以外にも/
で絞り込みが出来たり
選択画面の表示をかなり自由にカスタマイズすることもできますが
それらはWikiやmanを参照してみてください。
オプションが沢山あってちょっと使いには敷居が高いかもしれませんが、 シェルスクリプトなどでちょっとしたツールを作る際に 選択画面を使いたい時にこれを組み込むとちょっとかっこいい選択画面が作れるかと思います。
現状versionが0.9.15なのでnon-stable扱いでPull Requestしても入れてもらえない可能性が高い ↩