Microでシェルモードを使ってみる

Microのシェルモードを使ってみます。

今回の内容では、rg(ripgrep)とfzf(fuzzy finder)のコマンドを使用します。

BurntSushi/ripgrep: ripgrep recursively searches directories for a regex pattern while respecting your gitignore

junegunn/fzf: :cherry_blossom: A command-line fuzzy finder


環境

マシン : Raspberry Pi 5 8G

OS : Raspberry Pi OS(64-bit)

Micro : 2.0.11

ripgrep : 13.0.0

fzf : 0.38.0


下記コマンドでrgとfzfのコマンドを使用できるようにする。

$ sudo apt update
$ sudo apt install ripgrep
$ sudo apt install fzf

※最新版のfzfをインストールする場合は下記のコマンドを実行します。

$ git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
$ ~/.fzf/install

# fzfのアップグレード
$ cd ~/.fzf && git pull && ./install



はじめにMicroを介さずにrgとfzfの挙動を見ておきます。

どちらのコマンドも既知の場合は読み飛ばして構いません。


$ rg 検索したい文字列

で現在のディレクトリ以下のすべてのファイル(一部ファイルを除く)から検索したい文字列を含むファイルを検索します。


hogeという文字列で検索をしてみます。

$ rg hoge

存在していれば、

hoge.txt
1:hoge

のような感じで、該当するファイルと、検索ワード周辺の文字列が出力されます。


$ fzf

を実行すると、



のように現在のディレクトリ以下のファイルの相対パスが一覧で出力されます。


$ rg -l hoge | fzf

※rgに -lオプションを付けることで、ヒットしたファイル名のみ出力します。

のようにrgとfzfをパイプ( | )でつなぐことで、



rgの検索で該当した内容でfzfを実行できます。

Linuxコマンドのパイプを実装しながら学ぶ




Microのシェルモードでrgやfzfを使用してみます。

Ctrl + bでシェルモードになります。



シェルモードになると画面左下に $ が表示されます。


$ rg hoge

を実行してみます。


hello.html
5:    <title>hoge</title>


Press enter to continue

のような内容が出力されます。

※fzfも似たような内容になりますので、出力結果は省略します。


続いて、Microのシェルモードで下記のコマンドのようなパイプ付きのコマンドを実行してみます。

$ rg -l hoge | fzf

|: No such file or directory (os error 2)
fzf: No such file or directory (os error 2)


Press enter to continue

のような内容が出力されます。


どうやら、パイプ( | )以下のトークン(文字列のこと)がrgの引数として認識されているようです。


Microのシェルモードの仕様を確認してみましたところ、Go言語の標準機能のos/execを使用しているらしく、パイプ付きのコマンドを実行する場合は下記のように一工夫が必要になるそうです。

$ sh -c 'rg -l hoge | fzf'

実行したいコマンドをシングルクォーテーション( ' )で囲って、shの引数の一つとして扱うようにします。

exec package - os/exec - Go Packages



のようにパイプ付きのコマンドを実行できるようになりました。




余談ですが、今回紹介した機能をMicroのプラグインとしてインストールできるようにしました。

inunosinsi/micro-rg-fzf


使用したい場合は下記のコマンドでプラグインをインストールします。

$ sudo apt update
$ sudo apt install git ripgrep fzf
$ git clone https://github.com/inunosinsi/micro-rg-fzf.git ~/.config/micro/plug/rg-fzf

使い方はMicroを起動して、Ctrl + eでコマンドモードにし、

> rg 検索したい文字列

を実行します。

マインクラフト用ビジュアルエディタを開発しています。
詳しくはinunosinsi/mcws_blockly - githubをご覧ください。