web-dev-qa-db-ja.com

bashに魚のような構文の強調表示をさせる方法はありますか?

fish Shell では、実際のコマンドラインは構文で強調表示されています。

enter image description here

これと同じ動作をbashで取得する方法はありますか?

これと同じようなもの がありますが、zshの場合はbashではありません。これをbashに移植できる可能性はありますか?

提供されたスクリーンショット、説明、またはリンクを理解していない人のために明確にするために:端末で入力された実際のテキストを強調表示したいと思います。コマンド、括弧、引用符など.

43
Wuffers

Bashはインタラクティブ入力にreadlineを使用するため、そのプログラムに構文の強調表示を実装する必要があります。このような機能のコーディング方法について Googleグループディスカッション を見つけました。

魚のシェルは、そのプログラムに固有の own 行エディターを使用しており、直接移植することはできません。

zshはbashと非常によく似ており、その行エディターは extendable です。 zsh-syntax-highlighting を見つけて、zshでこの機能を有効にしました。

10
razzintown

GNU Bash(またはGNU Readline))で構文の強調表示を取得するsimple方法はありませんが、組み込みコマンドbind -x 'BYTE: Shell-COMMAND'を使用してすべてのユーザー入力をシェル関数にバインドすることにより、Bashスクリプトに独自のラインエディターを実装することは原則的に可能です。もちろん、独自のラインエディターに構文強調表示の機能を統合することもできます。

実際、私はラインエディターを実装しました ble.sh 構文の強調表示や自動提案などの機能を備えています。 Bash 3.0--5.0をサポートしています。 (ほぼ)純粋なBashスクリプトで記述されているため、~/.bashrcのスクリプトをsourceするだけです。以下はbashrcでble.shをセットアップするサンプルです(詳細は [〜#〜] readme [〜#〜] を参照):

$ git clone https://github.com/akinomyoga/ble.sh.git
$ cd ble.sh
$ make
$ make INSDIR="$HOME/.local/share/blesh" install
# bashrc

# Add the following line at the beginning of bashrc
[[ $- == *i* ]] &&
  source "$HOME/.local/share/blesh/ble.sh" --attach=none

# ... other bashrc settings ...

# Add the following line at the end of bashrc
((_ble_bash)) && ble-attach

:自分の製品へのリンクを使用して質問に回答することは、自己宣伝であり好ましくない場合があるため、この質問への回答は控えています。しかし、他の解決策は長い間登場しなかったし、この質問にも多くの見方があります(これはその重要な需要を反映しています)。だから今日はこの質問に答えることにした。次のメタ質問/回答を参照して、最初にアイデアを説明し、次に実装例としてプロジェクトへのリンクを提供しました。

はい、これは実際には自己宣伝であることを認めざるを得ませんが、これはこの機能を必要とする人々に役立つと思います。何か問題がありましたら、コメントで教えていただければ幸いです。

3
akinomyoga