📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)
| (同じ利用者による、間の27版が非表示) | |||
| 25行目: | 25行目: | ||
==== パッケージ管理システムからインストール ==== | ==== パッケージ管理システムからインストール ==== | ||
パッケージ管理システムからFishをインストールする。<br> | パッケージ管理システムからFishをインストールする。<br> | ||
# | # RHEL | ||
sudo | sudo dnf install fish | ||
# SUSE | # SUSE | ||
| 33行目: | 33行目: | ||
==== ソースコードからインストール ==== | ==== ソースコードからインストール ==== | ||
ビルドに必要な依存関係のライブラリをインストールする。<br> | ビルドに必要な依存関係のライブラリをインストールする。<br> | ||
# | # RHEL | ||
sudo | sudo dnf install cmake ncurses-devel | ||
# SUSE | # SUSE | ||
sudo zypper install cmake ncurses-devel ncurses5-devel libpcre2-16-0 libpcre2-8-0 pcre2-devel \ | sudo zypper install cmake ncurses-devel ncurses5-devel libpcre2-32-0 libpcre2-16-0 libpcre2-8-0 pcre2-devel \ | ||
python3-Sphinx gettext-runtime gettext-tools | python3-Sphinx gettext-runtime gettext-tools | ||
rust cargo # Fish 4.0以降からRustが必須 | |||
# Manjaro | |||
sudo pacman -S --needed cmake ncurses pcre2 python-sphinx gettext | |||
rust # Fish 4.0以降からRustが必須 | |||
<br> | <br> | ||
[https://github.com/fish-shell/fish-shell/releases FishのGithub]からソースコードをダウンロードする。<br> | [https://github.com/fish-shell/fish-shell/releases FishのGithub]からソースコードをダウンロードする。<br> | ||
ダウンロードしたファイルを解凍する。<br> | |||
tar xf fish-<バージョン>.tar.gz | |||
cd fish-<バージョン> | |||
<br> | |||
または、<code>git clone</code>コマンドを使用してソースコードをダウンロードする。<br> | |||
git clone https://github.com/fish-shell/fish-shell.git | git clone https://github.com/fish-shell/fish-shell.git | ||
cd fish-shell | |||
<br> | <br> | ||
Fishをビルドおよびインストールする。<br> | Fishをビルドおよびインストールする。<br> | ||
mkdir build && cd build | mkdir build && cd build | ||
cmake -DCMAKE_INSTALL_PREFIX=<Fishのインストールディレクトリ> | # Fish 4.3以前 | ||
cmake -DCMAKE_BUILD_TYPE=Release \ | |||
-DCMAKE_INSTALL_PREFIX=<Fishのインストールディレクトリ> \ | |||
-DWITH_DOCS=ON \ | |||
-DWITH_GETTEXT=ON \ | |||
.. | |||
# Fish 4.4以降 | |||
cmake -DCMAKE_BUILD_TYPE=Release \ | |||
-DCMAKE_INSTALL_PREFIX=<Fishのインストールディレクトリ> \ | |||
-DWITH_DOCS=ON \ | |||
-DWITH_MESSAGE_LOCALIZATION=ON \ | |||
.. | |||
make -j $(nproc) | make -j $(nproc) | ||
make install | make install | ||
| 57行目: | 76行目: | ||
==== 設定 ==== | ==== 設定 ==== | ||
. | 必要であれば、~/.profileファイル等にFishのパスを設定する。<br> | ||
vi ~/.profile | vi ~/.profile | ||
<br> | <br> | ||
<syntaxhighlight lang="sh"> | |||
# ~/.profileファイル | # ~/.profileファイル | ||
export PATH="/<Fishのインストールディレクトリ>/bin:$PATH" | export PATH="/<Fishのインストールディレクトリ>/bin:$PATH" | ||
</syntaxhighlight> | |||
<br><br> | |||
== グローバルエイリアス == | |||
Fishでは、Zshにあるグローバルエイリアスは実装しない方針となっている。<br> | |||
これは、Fishが関数を多用するアーキテクチャであり、グローバルエイリアスが予期しない場所で展開される危険性があるためである。<br> | |||
<br> | |||
Fishでグローバルエイリアスと同等の機能を実現するには、以下の方法がある。<br> | |||
<br> | |||
* <code>abbr</code> コマンドの <code>--position anywhere</code> オプションを使用する。(推奨) | |||
* <code>fish_commandline_append</code> 関数 や <code>fish_commandline_prepend</code> 関数を使用する。 | |||
* <code>bind</code> コマンド と <code>commandline</code> コマンドを組み合わせて使用する。 | |||
<br> | |||
<center> | |||
{| class="wikitable" | |||
|+ グローバルエイリアスの実現方法の比較 | |||
! 方法 !! 必要なバージョン !! 特徴 | |||
|- | |||
| abbr --position anywhere || Fish 3.6.0以降 || 公式推奨、[Space]キーで自動展開、履歴に展開後のコマンドが残る | |||
|- | |||
| fish_commandline_append関数 || Fish 3.3.0以降 || 組み込み関数、トグル動作をサポート | |||
|- | |||
| bind関数 + commandline関数 || 全バージョン || 柔軟なカスタマイズが可能、古いバージョンでも動作 | |||
|} | |||
</center> | |||
<br> | |||
==== abbr --position anywhereオプション (推奨) ==== | |||
Fish 3.6.0以降では、<code>abbr</code> コマンドの <code>--positionanywhere</code>オプションを使用することにより、コマンドラインのどこでも略語を展開できる。<br> | |||
これが公式に推奨されるグローバルエイリアスの代替手法である。<br> | |||
<br> | |||
===== 基本的な使用方法 ===== | |||
以下の例では、<code>L</code>と入力して[Space]キーを押下すると、<code>| less</code>に展開される。<br> | |||
<br> | |||
<syntaxhighlight lang="bash"> | |||
# グローバル展開の略語を追加 | |||
abbr -a --position anywhere -- L '| less' | |||
abbr -a --position anywhere -- H '| head' | |||
abbr -a --position anywhere -- T '| tail' | |||
abbr -a --position anywhere -- G '| grep' | |||
abbr -a --position anywhere -- W '| wc -l' | |||
abbr -a --position anywhere -- S '| sort' | |||
</syntaxhighlight> | |||
<br> | |||
上記の設定を永続化するには、<u>~/.config/fish/config.fish</u> ファイルに記述する。<br> | |||
<br> | |||
===== --set-cursorオプション ===== | |||
<code>--set-cursor</code> オプションを使用すると、展開後のカーソル位置を指定できる。<br> | |||
マーカー (デフォルトは <code>%</code> ) の位置にカーソルが移動して、マーカーは削除される。<br> | |||
<br> | |||
<syntaxhighlight lang="bash"> | |||
# 展開後、カーソルがパイプの前に位置する | |||
abbr -a --position anywhere --set-cursor -- L '% | less' | |||
# 展開後、カーソルがgrepの引数位置に移動する | |||
abbr -a --position anywhere --set-cursor -- G '| grep %' | |||
</syntaxhighlight> | |||
<br> | <br> | ||
===== --commandオプション (Fish 4.0以降) ===== | |||
source ~/.config/fish/ | Fish 4.0以降では、<code>--command</code> オプションを使用して、特定のコマンドの引数としてのみ略語を展開できる。<br> | ||
<br> | |||
<syntaxhighlight lang="bash"> | |||
# gitコマンドでのみ展開される略語 | |||
abbr --add --command git -- co checkout | |||
abbr --add --command git -- sw switch | |||
abbr --add --command git -- br branch | |||
abbr --add --command git -- st status | |||
# 使用例 | |||
# git co main → git checkout main に展開される | |||
# echo co → 展開されない | |||
</syntaxhighlight> | |||
<br> | |||
===== --functionオプション ===== | |||
<code>--function</code> オプションを使用すると、関数を実行して動的に展開内容を生成できる。<br> | |||
<br> | |||
<syntaxhighlight lang="bash"> | |||
# 現在の日付を挿入する略語 | |||
function _abbr_date | |||
echo (date +%Y-%m-%d) | |||
end | |||
abbr -a --position anywhere --function _abbr_date -- DATE | |||
# 使用例 | |||
# echo DATE → echo 2025-01-15 に展開される (日付は実行時の値) | |||
</syntaxhighlight> | |||
<br> | |||
===== --regexオプション ===== | |||
<code>--regex</code>オプションを使用すると、正規表現 (PCRE2) でマッチングできる。<br> | |||
<br> | |||
<syntaxhighlight lang="bash"> | |||
# .txtファイルをvimで開く略語 | |||
function _abbr_vim_txt | |||
echo "vim $argv" | |||
end | |||
abbr -a --position anywhere --regex --function _abbr_vim_txt -- '.+\.txt' | |||
</syntaxhighlight> | |||
<br> | |||
==== fish_commandline_append関数とfish_commandline_prepend関数 ==== | |||
Fish 3.3.0以降では、<code>fish_commandline_append</code> 関数 と <code>fish_commandline_prepend</code> 関数が組み込まれている。<br> | |||
これらの関数はトグル動作をサポートしており、既にコマンドラインに存在する場合は削除される。<br> | |||
<br> | |||
<center> | |||
{| class="wikitable" | |||
|+ fish_commandline_append関数とfish_commandline_prepend関数 | |||
! 関数 !! 説明 !! デフォルトのキーバインド | |||
|- | |||
| fish_commandline_prepend || コマンドラインの先頭に追加 || [Alt] + [S]キー (sudo追加) | |||
|- | |||
| fish_commandline_append || コマンドラインの末尾に追加 || なし | |||
|} | |||
</center> | |||
<br> | |||
以下の例では、キーバインドを設定して、パイプコマンドを簡単に追加できるようにしている。<br> | |||
<br> | |||
vi ~/.config/fish/config.fish | |||
<br> | |||
<syntaxhighlight lang="bash"> | |||
# [Alt] + [L]キーで "| less" を追加 | |||
bind \el 'fish_commandline_append "| less"' | |||
# [Alt] + [G]キーで "| grep " を追加 | |||
bind \eg 'fish_commandline_append "| grep "' | |||
# [Alt] + [H]キーで "| head" を追加 | |||
bind \eh 'fish_commandline_append "| head"' | |||
# [Alt] + [T]キーで "| tail" を追加 | |||
bind \et 'fish_commandline_append "| tail"' | |||
</syntaxhighlight> | |||
<br> | |||
==== bindコマンドとcommandlineコマンドを使用する方法 ==== | |||
<code>bind</code> コマンド と <code>commandline</code> コマンドを組み合わせることにより、柔軟なグローバルエイリアスを実現できる。<br> | |||
<br> | |||
以下の例では、コマンドラインに <u>l</u> と入力した状態で[Ctrl] + [X]キーを同時押下することにより、<u>|less</u> に展開されるように設定している。<br> | |||
headコマンド、tailコマンド、grepコマンド等も同様に設定可能である。<br> | |||
<br> | |||
vi ~/.config/fish/bind_global_alias.fish | |||
<br> | |||
<syntaxhighlight lang="bash"> | |||
# ~/.config/fish/bind_global_alias.fishファイル | |||
function bind_global_alias | |||
switch (commandline -t) | |||
case "l" | |||
commandline -rt '| less' | |||
case "h" | |||
commandline -rt '| head' | |||
case "t" | |||
commandline -rt '| tail' | |||
case "g" | |||
commandline -rt '| grep' | |||
case grep | |||
commandline -rt 'grep -iE ' | |||
case prog | |||
commandline -rt '& progress -mp $last_pid' | |||
case progress | |||
commandline -rt '& progress -mp $last_pid' | |||
end | |||
end | |||
# [Ctrl] + [X]キーに対応 | |||
bind \cx bind_global_alias | |||
# [Alt] + [X]キーに対応 | |||
bind \ex bind_global_alias | |||
</syntaxhighlight> | |||
<br> | |||
上記のファイルを作成した後、<u>~/.config/fish/config.fish</u> ファイルで読み込む設定を追加する。<br> | |||
<br> | |||
vi ~/.config/fish/config.fish | |||
<br> | |||
<syntaxhighlight lang="bash"> | |||
# グローバルエイリアスの読み込み | |||
source ~/.config/fish/bind_global_alias.fish | |||
</syntaxhighlight> | |||
<br> | |||
===== 使用例 ===== | |||
グローバルエイリアスを使用するには、展開したい文字を入力した後、設定したキー ([Ctrl] + [X]キー または [Alt] + [X]キー) を押下する。<br> | |||
<br> | |||
* <code>l</code> と入力して[Ctrl] + [X]キーを押下 | |||
*: | less に展開される | |||
* <code>h</code> と入力して[Ctrl] + [X]キーを押下 | |||
*: | head に展開される | |||
* <code>t</code> と入力して[Ctrl] + [X]キーを押下 | |||
*: | tail に展開される | |||
* <code>g</code> と入力して[Ctrl] + [X]キーを押下 | |||
*: | grep に展開される | |||
<br> | |||
例えば、<u>cat /var/log/messages l</u> と入力して[Ctrl] + [X]キーを押下すると、<u>cat /var/log/messages | less</u> に展開される。<br> | |||
<br> | |||
===== 独自のグローバルエイリアスを追加する ===== | |||
独自のグローバルエイリアスを追加するには、<code>switch</code>文の中に<code>case</code>を追加する。<br> | |||
<br> | |||
<syntaxhighlight lang="bash"> | |||
case "<展開前の文字列>" | |||
commandline -rt '<展開後の文字列>' | |||
</syntaxhighlight> | |||
<br> | |||
以下に、独自のグローバルエイリアスの追加例を示す。<br> | |||
<br> | |||
<syntaxhighlight lang="bash"> | |||
# wcコマンドにパイプする | |||
case "w" | |||
commandline -rt '| wc -l' | |||
# sortコマンドにパイプする | |||
case "s" | |||
commandline -rt '| sort' | |||
# xargsコマンドにパイプする | |||
case "x" | |||
commandline -rt '| xargs ' | |||
</syntaxhighlight> | |||
<br><br> | <br><br> | ||
| 116行目: | 347行目: | ||
== Pecoのインストール == | == Pecoのインストール == | ||
Pecoは、Goで記述されたシンプルな対話型フィルタリングツールである。<br> | |||
grepコマンドと異なり、タイプしながら現在の結果を閲覧することができるため、ログ、プロセス統計、ファイルの検索等のフィルタリングに最適である。<br> | |||
<br> | <br> | ||
この時、GOのインストールディレクトリ内にクローンする。(例. /<GOのインストールディレクトリ>/src/github.com/peco/peco) | * インストール方法 1 (推奨) | ||
これは、メインのバイナリが内部パッケージを参照しているため、ソースコードが正しいパッケージの場所に置かれている必要があるからである。< | *: [https://github.com/peco/peco.git PecoのGithub]にアクセスして、Pecoをダウンロードして解凍する。 | ||
*: <pre>tar xf peco_linux_<アーキテクチャ名>.tar.gz</pre> | |||
<br> | *: <br> | ||
ダウンロードしたディレクトリに移動して、Pecoをビルドする。< | *: 解凍したディレクトリを任意のディレクトリに配置する。 | ||
*: 推奨するディレクトリは、/<Fishのインストールディレクトリ>/binディレクトリである。 | |||
<br> | *: ~/.profileファイル等に、配置したディレクトリの環境変数<code>PATH</code>を追加する。 | ||
*: <pre>vi ~/.profile</pre> | |||
*: <br> | |||
<br> | *: <syntaxhighlight lang="sh"> | ||
生成された実行ファイルを、例えば、/<Fishのインストールディレクトリ>/binディレクトリ等にコピーする。 | # ~/.profileファイル | ||
<br> | export PATH="<Pecoのインストールディレクトリ>:$PATH" | ||
続いて、Pecoをビルドする。<br> | </syntaxhighlight> | ||
これにより、クローンされたPecoリポジトリのルートにPecoの実行ファイルがコンパイルされる。<br> | *: <br> | ||
* インストール方法 2 | |||
<br> | *: PecoのGitHubから、ソースコードをダウンロードする。 | ||
cmd/peco/ディレクトリにあるpeco.goファイルを、任意の場所にコピーする。<br> | *: この時、GOのインストールディレクトリ内にクローンする。(例. /<GOのインストールディレクトリ>/src/github.com/peco/peco) | ||
*: これは、メインのバイナリが内部パッケージを参照しているため、ソースコードが正しいパッケージの場所に置かれている必要があるからである。 | |||
*: <pre>git clone https://github.com/peco/peco.git peco</pre> | |||
*: <br> | |||
*: ダウンロードしたディレクトリに移動して、Pecoをビルドする。 | |||
*: <pre>make build</pre> | |||
*: <br> | |||
*: 次に、releases/<バージョン>ディレクトリにpecoをインストールする。 | |||
*: <pre>go build</pre> | |||
*: <br> | |||
*: 生成された実行ファイルを、例えば、/<Fishのインストールディレクトリ>/binディレクトリ等にコピーする。 | |||
*: これは、Pecoの依存関係の正しいバージョンをインストールしている。 | |||
*: <br> | |||
*: 続いて、Pecoをビルドする。<br> | |||
*: これにより、クローンされたPecoリポジトリのルートにPecoの実行ファイルがコンパイルされる。<br> | |||
*: <pre>go build cmd/peco/peco.go</pre> | |||
*: <br> | |||
*: cmd/peco/ディレクトリにあるpeco.goファイルを、任意の場所にコピーする。<br> | |||
<br><br> | <br><br> | ||
== Oh My Fishのインストール == | == Oh My Fishのインストール == | ||
Oh My Fishは何年もメンテナンスされていないため、複数のテーマやパッケージが壊れており、特定の部分が動作しない可能性がある。<br> | |||
<br> | |||
==== Curlコマンドからインストール ==== | ==== Curlコマンドからインストール ==== | ||
Curlコマンドを実行して、Oh My Fishをダウンロードする。<br> | Curlコマンドを実行して、Oh My Fishをダウンロードする。<br> | ||
| 163行目: | 412行目: | ||
fish install --offline=omf.tar.gz | fish install --offline=omf.tar.gz | ||
<br><br> | <br><br> | ||
== ログインシェルの変更 == | |||
Fishを利用可能なシェル一覧に追加する。<br> | |||
/etc/shellsファイルにFishのパスを追加することにより、<code>chsh</code>コマンド、または、<code>usermod</code>コマンドでログインシェルの変更が可能となる。<br> | |||
echo "/<Fishのインストールディレクトリ>/bin/fish" | sudo tee -a /etc/shells | |||
<br> | |||
次に、ユーザのログインシェルを変更する。(パスワードの入力が必要となる)<br> | |||
chsh -s /<Fishのインストールディレクトリ>/bin/fish $USER | |||
# または | |||
sudo usermod --shell /<Fishのインストールディレクトリ>/bin/fish $USER | |||
<br> | |||
ログインシェルが変更されているかどうかを確認する。<br> | |||
grep $USER /etc/passwd | |||
<br> | |||
再ログイン、または、PCを再起動する。<br> | |||
<br><br> | |||
== ベルの設定 == | |||
以下の例では、sudoコマンドを実行してパスワード認証する場合、ベルを鳴らしている。<br> | |||
<br> | |||
Fishの設定ファイルを開く。<br> | |||
vi ~/.config/fish/config.fish | |||
<br> | |||
<syntaxhighlight lang="fish"> | |||
# ~/.config/fish/config.fishファイル | |||
# ベルを有効化 | |||
## デフォルトのキーバインディングを使用 | |||
## -Uフラグはユニバーサル変数として設定 (全てのセッションで有効) | |||
set -U fish_key_bindings fish_default_key_bindings | |||
## ベルを明示的に有効化 | |||
## -gフラグはグローバル変数として設定 | |||
set -g fish_ring_bell on | |||
# sudoのエイリアスを作成してベルを追加 | |||
function sudo | |||
# パスワード入力の前にベル音を鳴らす | |||
command echo -ne "\a" | |||
# 元のsudoコマンドを実行 | |||
command sudo $argv | |||
end | |||
</syntaxhighlight> | |||
<br><br> | |||
__FORCETOC__ | __FORCETOC__ | ||
[[カテゴリ: | [[カテゴリ:RHEL]][[カテゴリ:SUSE]][[カテゴリ:Raspberry_Pi]][[カテゴリ:PinePhone]][[カテゴリ:シェルスクリプト]] | ||