FishとAtuinの使い方
何年も前に、fish shellに関する記事を読みました。長年zshとOh My Zshを使ってきたので、とてもスムーズに動作し、乗り換える気にはなれませんでした。ある日、ふとfishを試してみようと思い立ちました。数ヶ月使っていますが、なかなか良いです。
これはあくまで個人的な意見です。
1. メリット
- 補完機能と候補表示機能はzshよりも強力です。私はfishをほぼネイティブで使用しており、追加設定は一切していません。表示されるプロンプトはAIによるもののように感じることもあります。
ディレクトリに移動してコマンドを実行すると、常に正しいプロンプトが表示されます。
以下に示すように、Wineのソースディレクトリに移動して再コンパイルの準備をしています。ドットを入力すると、完全なコマンド名が表示されます。Ctrl+Fまたは右矢印キーを押すと、コマンドが自動的に補完されます。
例えば、「ip」と入力してスペースキーを押し、「Tab」キーを押すと、「ip」コマンドのサブオプションがポップアップ表示されます。正直なところ、「ip」コマンドは最近かなり複雑で、私はもう覚えられないほど年老いて体も弱っているので、このようなプロンプトは本当に助かります。
それだけではありません!次に、「ip link」と入力してスペースキーとタブキーを押します。サブコマンドとコアプロンプトが同時に表示されます。もちろん、履歴補完機能も引き続き利用できるので、好きなものを選択できます。
このようなプロンプトは非常に便利で、日々の仕事の効率を大幅に向上させてくれると断言できます。
- 高速です。動作を遅くするものは何でも面倒です。
ネイティブfishの組み込み機能は、日常的な運用には十分すぎるほどです。Oh My Zshのような追加機能は必要ありません。素の状態から実行する方がはるかに安全です。
- シンプルな設定
fish_configと入力してください。
1➜ ~ fish_config
2Web config started at file:///tmp/web_config22yhky5b.html
3それでもうまくいかない場合は、http://localhost:8000/af9321754796589c755386f704c81785/ を開いてみてください。
4ENTERキーを押して停止してください。
デフォルトのブラウザに表示されるWebページで、色、プロンプト、その他の設定を行います。
help と入力してください。
1➜ ~ help
2ヘルプ: xdg-open でヘルプが表示されています。
ブラウザに file:///usr/share/doc/fish/index.html が表示され、オフラインドキュメントが表示されます。
2. デメリット
- 互換性が低い
例えば、Python 仮想環境をアクティブ化するには、次のように実行する必要があります。
1➜ google-api-python-client . .venv/bin/activate.fish
2(.venv) ➜ google-api-python-client
activate.fish スクリプトが付属しているので、それほど面倒ではないようです。
一部のシェルスクリプトは直接実行できません。このような場合、私は通常 bash コマンドを実行して一時的に切り替えます。
他に方法はありません。ほとんどのシステムでは bash がデフォルトのシェルとして付属しています。
今のところ、他に不便な点は見当たりません。
要するに、個人的には fish シェルは個人使用に非常に適していると思います。高速で便利です。数ヶ月使用した後、しばらくは zsh に切り替えるつもりはありません。
3. Atuin を使ったシェル履歴の管理
少し前に Atuin プロジェクトを試してみましたが、最初は大きな進歩だと思いました。主な問題は、デフォルトで上矢印キーが優先されてしまうことで、これに慣れるのが難しかったです。
Atuin のインストール方法と使い方については、ここでは詳しく説明しません。オンラインで簡単なチュートリアルが数多く見つかります。
私はクラウド同期機能は使用していません。最近は履歴をサードパーティに保存するのは不可能です。暗号化は安全で誰にも見られないものの、個人データは自分で管理する方が賢明です。
クラウド同期がない場合、デフォルトのデータはSQLiteに保存されます。データ構造は次のとおりです。
実行時間、実行コマンド、終了ステータス、作業ディレクトリ、ホスト名などが記録されます。
他のシェルから履歴をインポートすることもできますが、繰り返しインポートした場合に重複が削除されるかどうかはテストしていません。
1➜ ~ atuin import zsh
2Atuin
3=======================
4🌍
5🐘🐘🐘🐘
6🐢
7=========================
8履歴をインポートしています...
9zshから履歴をインポートしています
10インポート完了!
11➜ ~ atuin import bash
12Atuin
13=======================
14🌍
15🐘🐘🐘🐘
16🐢
17=========================
18履歴をインポートしています...
19bash から履歴をインポートしています
20インポート完了!
他のシェルをインポートします。これは、ポータブルな履歴データベースを持つようなものです。
1➜ ~ ファイル ~/.local/share/atuin/history.db
2/home/mephisto/.local/share/atuin/history.db: SQLite 3.x データベース、最終書き込み時 SQLite バージョン 3038002、書き込みバージョン 2、読み取りバージョン 2、ファイルカウンタ 72、データベースページ 966、Cookie 0x4、スキーマ 4、UTF-8、バージョン有効期間 72
このデータベースファイルを保存しておけば、新しいコンピュータを購入しても履歴を取得できます。これは業界における真に良心的な取り組みです。
4. fish での atuin の矢印キーのバインド解除
他の人の意見は分かりませんが、個人的にはシェルの矢印キーを使用し、atuin の検索キーを Ctrl + R にバインドするのが好きです。結局のところ、zsh も fish も atuin のような強力な検索機能を備えていないからです。
fish で上矢印キーのバインドを無効にしてみましょう。
1➜ fish pwd
2/home/mephisto/.config/fish
3➜ fish cat config.fish
4if status is-interactive
5# 対話型セッションで実行するコマンドはここに記述できます
6set -gx ATUIN_NOBIND "true"
7atuin init fish | source
8bind \cr _atuin_search
9end
10
11function fish_greeting
12end
この設定にはドキュメントが必要です。公式ドキュメントには zsh の例しか記載されていません。
なぜ動作するのでしょうか?最後の部分をご覧ください:
1➜ ~ atuin init fish
2set -gx ATUIN_SESSION (atuin uuid)
3
4function _atuin_preexec --on-event fish_preexec
5set -gx ATUIN_HISTORY_ID (atuin history start "$argv[1]")
6end
7
8function _atuin_postexec --on-event fish_postexec
9set s $status
10if test -n "$ATUIN_HISTORY_ID"
11RUST_LOG=error atuin history end $ATUIN_HISTORY_ID --exit $s &
12disown
13end
14end
15
16function_atuin_search
17set h (RUST_LOG=error atuin search -i (commandline -b) 3>&1 1>&2 2>&3)
18commandline -f repaint
19if test -n "$h"
20コマンドライン -r $h
21end
22end
23
24if test -z $ATUIN_NOBIND
25bind \cr _atuin_search
26bind -k up _atuin_search
27bind \eOA _atuin_search
28bind \e\[A _atuin_search
29
30if bind -M insert > /dev/null 2>&1
31bind -M insert \cr _atuin_search
32bind -M insert -k up _atuin_search
33bind -M insert \eOA _atuin_search
34bind -M insert \e\[A _atuin_search
35end
36end
変数 ATUIN_NOBIND に文字列 "true" が含まれており、長さが 0 でないことを確認します。
-z STRING STRING の長さが 0 の場合、true を返します。
if 文内の様々な演算はバインドされないため、設定が実行されます。
この設定により、デフォルトの矢印キー機能を過度に大きな範囲で使用せずに使用できるだけでなく、履歴を一元管理し、より高度な atuin 検索機能(Ctrl + R を押すことで起動)も使用できます。非常に便利です。
Atuin アイコン:
atuin の機能の詳細については、ドキュメントをご覧ください。
著作権に関する声明:
- 出典のないコンテンツはすべてオリジナルです。、無断転載はご遠慮ください(転載後にレイアウトが崩れたり、内容が制御不能になったり、継続的に更新できない等の理由から)。
- このブログのコンテンツを非営利目的で解釈したい場合は、(読者の便宜のため)「オリジナル ソース」または「参照リンク」の形式でこのサイトの関連 Web ページ アドレスを提供してください。