Bash の補完候補の色指定

はじめに

  • Bash をはじめ多くのシェルでは Tab で引数補完ができ、多くの補完候補が複数ある場合はその候補が表示される
  • Zsh ではその表示される補完候補の内、マッチしている部分と残りの部分の色を指定できるらしいが、Bash にはそれ専用の設定方法がない
  • ただ、ネットにも情報が少ないものの、Bash でも他の要素に対する設定を使い回せる

確認環境

Bash

bash --version GNU bash, version 5.2.37(1)-release (x86_64-pc-linux-gnu) Copyright (C) 2022 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software; you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.

readline

dpkg -s libreadline-dev | grep Version Version: 8.3-3

dircolors

dircolors --version dircolors (uutils coreutils) 0.2.2

ターミナル

ターミナルは次の 3 つで確認

ptyxis --version Ptyxis 49.1 GTK: 4.20.1 (Compiled against 4.20.1) VTE: 0.80.3 (Compiled against 0.80.3) Copyright 2020-2024 Christian Hergert, et al. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
wezterm --version wezterm 20260108-132011-3715c874
tilda --version Tilda 2.0.0 Copyright (c) 2012-2020 Sebastian Geiger (lanoxx@gmx.net) Copyright (c) 2005-2009 Tristan Sloughter (sloutri@iit.edu) Copyright (c) 2005-2009 Ira W. Snyder (tilda@irasnyder.com) General Information: https://github.com/lanoxx/tilda Bug Reports: https://github.com/lanoxx/tilda/issues?state=open This program comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions. See the file COPYING for details.

設定方法

注意点

  • 先に書いたとおり、補完候補の色専用の指定はなく、使い回しになるので、他の要素の色も変わる
  • ターミナルのカラー・パレット (ANSI カラー・コード) を指定するので、実際の色は使用ターミナルの設定により変わる

設定手順

~/.inputrc の編集

~/.inputrc に次を追加

set colored-completion-prefix on set colored-stats on

カラー・コードの指定

LS_COLORS で直接設定しても良いが、dircolors を使ったほうが設定しやすい

dircolors の設定
  1. まだ dircolors を使っていない場合
    • dircolors -p > ~/.config/dircolors
      でデフォルト設定をファイル出力
    • ~/.bashrc で次のように追記し、設定するファイルを読み込むように変更する
      if [ -x /usr/bin/dircolors ]; then if [ -r "$HOME/.config/dircolors" ]; then eval "$(dircolors -b "$HOME/.config/dircolors")" else eval "$(dircolors -b)" fi fi
  2. ~/.config/dircolorsdircolors の読み込みファイルの編集
    • SOCK
      補完候補中の補完にマッチした範囲
      MISSING
      補完候補中の補完にマッチしていない残りの範囲
      で設定できる
      • 上記キーワードが無ければ単純に追記すれば良い
      • 本来はそれぞれソケットとリンク切れのシンボリック・リンクのリンク先
    • 設定例は次の通り
      SOCK 01;30;103 MISSING 01;30;43
      設定例による表示例
    • パスの補完の場合のマッチしていない残りの部分は、MISSING ではなく他のファイル・タイプによる設定が使われる
    • ; で区切られた数字が ANSI カラー・コードで使用頻度の高い数値は下記の表のとおりだが

      • 指定は一つだけでも良い
      • 複数指定は順不同
      • 補完中の点滅は見にくくなるので使わないほうが良い
      • 「明るい系統」の色は、上記の画像のように実際のターミナル・パレットのテーマでは暗色や別色が設定されている場合も多い
      色指定
      標準 明るい系統
      文字色背景色文字色背景色
      30 40 90 100
      31 41 91 101
      32 42 92 102
      33 43 93 103
      34 44 94 104
      マゼンタ 35 45 95 105
      シアン 36 46 96 106
      37 47 97 107
      修飾部分
      数字意味
      00標準
      01太字
      04下線
      05点滅
      07反転