bashとzshでコマンド履歴からコマンドを検索して実行できるツールHSTR
はじめに
LinuxやmacOS、またはWSLでコマンドを使っている際に、長いコマンドやよく使うコマンドを何度も入力することがあると思います。HSTRは、コマンド履歴からコマンドを検索してそのまま実行できるツールです。この記事では、HSTRのインストール手順と使い方をまとめます。
HSTRについて
HSTRはbash、zshで動作し、Linux、macOS、Windows Subsystems for Linux(以降、WSL)にインストール可能です。私はWSL上のUbuntuにインストールして使用しています。 動作イメージは以下のGIF画像の通りです。HSTRをショートカットキーで呼び出すと、入力待ち状態になり、入力した内容に合致するコマンドを表示してくれます。表示されたコマンドをそのまま実行できます。
以下が公式リポジトリです。各ディストリビューションでのインストール方法などが詳しく記載されています。
Easily view, navigate and search your command history with shell history suggest box for Bash and zsh.
前提と環境
この記事では、WSL上のUbuntu18.04にインストールしました。
- OS : Ubuntu18.04 (WSL上)
HSTRをインストールする
インストール手順は簡単で、リポジトリを追加してapt
でインストールするだけになります。
$ sudo add-apt-repository ppa:ultradvorka/ppa
$ sudo apt update
$ sudo apt install hstr
以上でインストールは完了です。最後に、以下のコマンドを実行してHSTRの設定をホームディレクトリにある.bashrc
に書き込んでおきます。
hstr --show-configuration >> ~/.bashrc
上記コマンドを実行後、以下のコマンドで.bashrc
を読み込んで書き込んだ内容を反映させます。
source ~/.bashrc
HSTRでコマンド履歴からコマンドを検索して実行する
HSTRを呼び出すには、デフォルトのショートカットキーであるCtrl + r
を使います。ターミナル上でCtrl + r
を押下すると、以下のようにコマンド検索用の入力待ち状態になります。そしてここで適当に入力すると、その入力内容に合致するコマンド候補を表示してくれます。後は表示されたコマンドが選択された状態で右矢印キーを押下すると、そのコマンドが入力されます。右矢印キーではなくEnterを押下すればそのまま実行されます。
HSTRの設定を変更する
HSTRの基本的な使い方は以上ですが、設定を色々と変更、追加できカスタマイズも可能です。
なお、HSTRは、インストール時に実行したコマンドからもわかるようにホームディレクトリにある.bashr
に設定を書き込んでいます。デフォルトの状態では、.bashrc
の内容として以下が末尾に追記されていました。
# HSTR configuration - add this to ~/.bashrc
alias hh=hstr # hh to be alias for hstr
export HSTR_CONFIG=hicolor # get more colors
shopt -s histappend # append new history items to .bash_history
export HISTCONTROL=ignorespace # leading space hides commands from history
export HISTFILESIZE=10000 # increase history file size (default is 500)
export HISTSIZE=${HISTFILESIZE} # increase history size (default is 500)
# ensure synchronization between Bash memory and history file
export PROMPT_COMMAND="history -a; history -n; ${PROMPT_COMMAND}"
# if this is interactive shell, then bind hstr to Ctrl-r (for Vi mode check doc)
if [[ $- =~ .*i.* ]]; then bind '"\C-r": "\C-a hstr -- \C-j"'; fi
# if this is interactive shell, then bind 'kill last command' to Ctrl-x k
if [[ $- =~ .*i.* ]]; then bind '"\C-xk": "\C-a hstr -k \C-j"'; fi
上記の内容を変更することで設定変更を行います。
ショートカットキーを変更する
ショートカットキーを変更するにあたり、まず使用しているbashまたはzshのキーマップを確認します。bashではデフォルトではEmacsのキーマップとなっていますが、以下のコマンドを実行すると確かにEmacsになっていることが分かります。
$ bind -v | grep editing-mode
set editing-mode emacs
$ bind -v | grep keymap
set keymap emacs
以降では、キーマップがEmcasであることを前提とします。EmacsかViかによってショートカットキーに関する設定ファイルの書き方が異なります。
例えばもしショートカットキーをCtrl + Alt + r
に変更したい場合は、該当部分を以下のように変更します。
# Ctrl + Alt
# if this is interactive shell, then bind hstr to Ctrl-r (for Vi mode check doc)
if [[ $- =~ .*i.* ]]; then bind '"\C-r": "\C-a hstr -- \C-j"'; fi
# Ctrl + Alt +r
# if this is interactive shell, then bind hstr to Ctrl-r (for Vi mode check doc)
if [[ $- =~ .*i.* ]]; then bind '"\e\C-r":"\C-ahstr -- \C-j"'; fi
キーマップがViになっている場合の変更方法やその他の設定変更については以下の公式ドキュメントに記載されています。
まとめ
日常的にターミナルを使用する方でかつ毎回同じコマンドを使っている場合には、中々に便利です。長いコマンドを何度も入力することはなくなると思います。
関連記事
- 公開日:2020/02/16 更新日:2020/02/16
圧縮、暗号化、リモート対応の差分バックアップを作成できる「Borg Backup」の使い方
圧縮、暗号化に対応し差分バックアップを作成できるソフトウェアである「Borg Backup」をUbuntuにインストールして使ってみたのでその手順をまとめます。「Borg Backup」はLinux、macOSに対応しています。
- 公開日:2020/02/14 更新日:2020/02/14
自分専用の後で読むサービスを構築できる「Wallabag」をUbuntu + Nginxで構築する手順
後で読むサービスのPocketにかなり近く、機能豊富なオープンソースのWallabagをUbuntuにインストールしたのでその手順をまとめます。
- 公開日:2020/02/12 更新日:2020/02/12
ファイル単位で暗号化して保存できるCryptomatorをインストールして使う手順
Cryptomatorは、ファイル単位での暗号化が可能なソフトウェアです。この記事では、UbuntuにCryptomatorをインストールする手順と使い方をまとめます。
- 公開日:2020/01/22 更新日:2020/01/22
WireGuardでVPNサーバーを構築してスマホやPCから接続する手順
WireGuardはOpenVPNよりもシンプルで高速、より安全なVPNとして開発が進められており、OpenVPNに代わるVPNとして期待されています。この記事ではWireGuardを使ってVPNサーバーを構築し、そのVPNサーバーにUbuntuやiPhoneから実際に接続してみるまでの手順をまとめます。
- 公開日:2020/01/17 更新日:2020/01/17
ディレクトリ表示や移動をインタラクティブに実行できるコマンドツール「Broot」
Linuxで端末を使っている時にディレクトリ構造をざっくり確認したり各ディレクトリにどのようなファイルが入っているかを確認したりしたい場合があると思います。Brootはディレクトリ構造を表示しつつさらにそこから各ディレクトリに移動したりファイルを検索したりできるコマンドラインツールです。