📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

 
(同じ利用者による、間の16版が非表示)
39行目: 39行目:
  sudo zypper install cmake ncurses-devel ncurses5-devel libpcre2-32-0 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 ARM
  # Manjaro
  sudo pacman -S --needed cmake ncurses pcre2 python-sphinx gettext
  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>
または、<code>git</code>コマンドを使用してソースコードをダウンロードする。<br>
ダウンロードしたファイルを解凍する。<br>
  wget https://github.com/fish-shell/fish-shell/releases/download/x.x.x/fish-x.x.x.tar.xz
  tar xf fish-<バージョン>.tar.gz
  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>
cd fish-*
  mkdir build && cd build
  mkdir build && cd build
   
   
  cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=<Fishのインストールディレクトリ> -DBUILD_DOCS=ON -DINSTALL_DOCS=ON -DWITH_GETTEXT=ON ..
# 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
60行目: 76行目:


==== 設定 ====
==== 設定 ====
.profileファイルや.bashrcファイル等に、Fishのパスを設定する。<br>
必要であれば、~/.profileファイル等にFishのパスを設定する。<br>
  vi ~/.profile
  vi ~/.profile
<br>
<br>
<syntaxhighlight lang="sh">
  # ~/.profileファイル
  # ~/.profileファイル
   
   
  export PATH="/<Fishのインストールディレクトリ>/bin:$PATH"
  export PATH="/<Fishのインストールディレクトリ>/bin:$PATH"
<br>
</syntaxhighlight>
Fishの設定を反映させる場合、以下のコマンドを実行する。<br>
source ~/.config/fish/config.fish
<br><br>
<br><br>


== グローバルエイリアス ==
== グローバルエイリアス ==
Fishでは、Zshにあるグローバルエイリアスは実装しない方針となっている。<br>
Fishでは、Zshにあるグローバルエイリアスは実装しない方針となっている。<br>
もし、Zshにあるようなグローバルエイリアスを定義するには、<code>bind</code>コマンドと<code>commandline</code>コマンドを使用する。<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>
===== --commandオプション (Fish 4.0以降) =====
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>
<br>
以下の例では、[L]キーを押下後に[Ctrl] + [X]キーを同時押下することにより、"| less"が展開されるように設定している。<br>
  <syntaxhighlight lang="bash">
なお、<code>headコマンド</code>、<code>tail</code>コマンド、<code>grep</code>コマンドも同様である。<br>
  # ~/.config/fish/bind_global_alias.fishファイル
  <syntaxhighlight lang="fish">
  # bind_global_alias.fishファイル
   
   
  function bind_global_alias
  function bind_global_alias
90行目: 235行目:
       case "g"
       case "g"
           commandline -rt '| grep'
           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
  end
  end
   
   
# [Ctrl] + [X]キーに対応
  bind \cx bind_global_alias
  bind \cx bind_global_alias
   
   
  # by @GReagle@github
  # [Alt] + [X]キーに対応
  # https://github.com/fish-shell/fish-shell/issues/1963#issuecomment-93775067
  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>
  </syntaxhighlight>
<br>
<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>
== FisherManのインストール ==
== FisherManのインストール ==
==== FisherManのインストール ====
==== FisherManのインストール ====
152行目: 352行目:
* インストール方法 1 (推奨)
* インストール方法 1 (推奨)
*: [https://github.com/peco/peco.git PecoのGithub]にアクセスして、Pecoをダウンロードして解凍する。
*: [https://github.com/peco/peco.git PecoのGithub]にアクセスして、Pecoをダウンロードして解凍する。
*: <code>tar xf peco_linux_<アーキテクチャ名>.tar.gz</code>
*: <pre>tar xf peco_linux_<アーキテクチャ名>.tar.gz</pre>
*: <br>  
*: <br>  
*: 解凍したディレクトリを任意のディレクトリに配置する。
*: 解凍したディレクトリを任意のディレクトリに配置する。
*: 推奨するディレクトリは、/<Fishのインストールディレクトリ>/binディレクトリである。
*: 推奨するディレクトリは、/<Fishのインストールディレクトリ>/binディレクトリである。
*: ~/.profileファイル等に、配置したディレクトリの環境変数<code>PATH</code>を追加する。
*: ~/.profileファイル等に、配置したディレクトリの環境変数<code>PATH</code>を追加する。
*: <code># ~/.profileファイル</code>
*: <pre>vi ~/.profile</pre>
*: <code>export PATH="<Pecoのインストールディレクトリ>:$PATH"</code>
*: <br>
*: <syntaxhighlight lang="sh">
# ~/.profileファイル
export PATH="<Pecoのインストールディレクトリ>:$PATH"
</syntaxhighlight>
*: <br>
*: <br>
* インストール方法 2
* インストール方法 2
164行目: 369行目:
*: この時、GOのインストールディレクトリ内にクローンする。(例. /<GOのインストールディレクトリ>/src/github.com/peco/peco)
*: この時、GOのインストールディレクトリ内にクローンする。(例. /<GOのインストールディレクトリ>/src/github.com/peco/peco)
*: これは、メインのバイナリが内部パッケージを参照しているため、ソースコードが正しいパッケージの場所に置かれている必要があるからである。
*: これは、メインのバイナリが内部パッケージを参照しているため、ソースコードが正しいパッケージの場所に置かれている必要があるからである。
*: <code>git clone https://github.com/peco/peco.git peco</code>
*: <pre>git clone https://github.com/peco/peco.git peco</pre>
*: <br>
*: <br>
*: ダウンロードしたディレクトリに移動して、Pecoをビルドする。
*: ダウンロードしたディレクトリに移動して、Pecoをビルドする。
*: <code>make build</code>
*: <pre>make build</pre>
*: <br>
*: <br>
*: 次に、releases/<バージョン>ディレクトリにpecoをインストールする。
*: 次に、releases/<バージョン>ディレクトリにpecoをインストールする。
*: <code>go build</code>
*: <pre>go build</pre>
*: <br>
*: <br>
*: 生成された実行ファイルを、例えば、/<Fishのインストールディレクトリ>/binディレクトリ等にコピーする。
*: 生成された実行ファイルを、例えば、/<Fishのインストールディレクトリ>/binディレクトリ等にコピーする。
177行目: 382行目:
*: 続いて、Pecoをビルドする。<br>
*: 続いて、Pecoをビルドする。<br>
*: これにより、クローンされたPecoリポジトリのルートにPecoの実行ファイルがコンパイルされる。<br>
*: これにより、クローンされたPecoリポジトリのルートにPecoの実行ファイルがコンパイルされる。<br>
*: <code>go build cmd/peco/peco.go</code>
*: <pre>go build cmd/peco/peco.go</pre>
*: <br>
*: <br>
*: cmd/peco/ディレクトリにあるpeco.goファイルを、任意の場所にコピーする。<br>
*: cmd/peco/ディレクトリにあるpeco.goファイルを、任意の場所にコピーする。<br>
183行目: 388行目:


== Oh My Fishのインストール ==
== Oh My Fishのインストール ==
Oh My Fishは何年もメンテナンスされていないため、複数のテーマやパッケージが壊れており、特定の部分が動作しない可能性がある。<br>
<br>
==== Curlコマンドからインストール ====
==== Curlコマンドからインストール ====
Curlコマンドを実行して、Oh My Fishをダウンロードする。<br>
Curlコマンドを実行して、Oh My Fishをダウンロードする。<br>
205行目: 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]][[カテゴリ:シェルスクリプト]]
[[カテゴリ:RHEL]][[カテゴリ:SUSE]][[カテゴリ:Raspberry_Pi]][[カテゴリ:PinePhone]][[カテゴリ:シェルスクリプト]]