-
-
Notifications
You must be signed in to change notification settings - Fork 113
説明書 §1 基本
[ 日本語 | English ] ≫ 説明書 [§1 基本 | §2 描画 | §3 束縛 | §4 編集 | §5 Emacs | §6 Vim | §7 補完 | §8 他 | 索引]
1. ble.sh 概要†
ble.sh - Bash Line Editor (version 0.4)
ble.sh は .bashrc から読み込める GNU Bash の設定として、Bash スクリプトで書かれたラインエディタです。
Bash に付属のラインエディタ GNU Readline を置き換えて動作することにより、Readline にはない様々な機能を提供します。
-
構文着色:
fishやzsh-syntax-highlightingのような文法構造に従った着色を行います。zsh-syntax-highlightingのような単純な着色ではなく、構文の入れ子構造や複数のヒアドキュメントなども正しく解析して着色します。 -
補完増強: 補完を大幅に増強します。
文法構造に応じた補完、クォートやパラメータ展開を展開した上でのプログラム補完、曖昧補完に対応しています。
また、候補をカーソルキーや TAB, S-TAB で選択できるメニュー補完、
fishやzsh-autosuggestionsのような自動補完 (Bash 4.0 以上) の機能もあります。 更に、従来pecoやfzfを呼び出さなければならなかった補完候補の絞り込みもメニュー絞り込み (Bash 4.0 以上) として自然な形で組み込んでいます。 他に、動的略語展開や、zsh-abbreviationsのような静的略語展開にも対応しています。 -
Vim編集モード:
set -o viによる編集モードを増強します。 挿入・ノーマルモードの他に(行・矩形)ビジュアルモード、置換モードなどの各種モードに対応しています。 テキストオブジェクト・各種レジスタ・オペレータ・キーボードマクロなどにも対応しています。 拡張としてvim-surroundも提供しています。
GitHub のリポジトリ から利用できます。ライセンスは 3条項BSD です。以下において $HOME/.local/share/blesh の部分は好きなインストール先に置き換えて実行してください。
Arch Linux では AUR からインストールして頂く事も可能です。
選択肢1: GitHub のアカウントがない場合、またはSSH鍵を登録していない場合
※ git, GNU make, GNU awk が必要 になります
git clone --recursive https://github.com/akinomyoga/ble.sh.git
cd ble.sh
make
make INSDIR="$HOME/.local/share/blesh" install選択肢2: GitHub 上にSSH鍵を登録している場合
※ git, GNU make, GNU awk が必要 になります
git clone --recursive [email protected]:akinomyoga/ble.sh.git
cd ble.sh
make
make INSDIR="$HOME/.local/share/blesh" install選択肢3: curl を使って生成済み ble.sh v0.3 (前バージョン・機能制限あり) を入手する場合
※ curl, xz, GNU tar が必要 になります
curl -LO https://github.com/akinomyoga/ble.sh/releases/download/v0.3.2/ble-0.3.1.tar.xz
tar xJf ble-0.3.1.tar.xz
cp -r ble-0.3.1 "$HOME/.local/share/blesh"選択肢4: wget を使って生成済み ble.sh v0.3 (前バージョン・機能制限あり) を入手する場合
※ wget, xz, GNU tar が必要 になります
wget https://github.com/akinomyoga/ble.sh/releases/download/v0.3.2/ble-0.3.1.tar.xz
tar xJf ble-0.3.1.tar.xz
cp -r ble-0.3.1 "$HOME/.local/share/blesh"アップデート方法
※ git, GNU make, GNU awk が必要 になります
ble.sh をロードした状態で ble-update コマンドを実行して下さい (ble-0.3 以降)。
ble-update # ble-0.3+または、既に ble.sh の git リポジトリをお持ちの場合は以下のようにしてアップデートできます。
cd ble.sh # ※既に持っている git リポジトリに入る
git pull
git submodule update --recursive --remote
make
make INSDIR="$HOME/.local/share/blesh" install1.2 設定方法†
設定の一例です。~/.bashrc に以下のように記述します。
# bashrc
# .bashrc の先頭近くに以下を記述します
[[ $- == *i* ]] &&
source -- "$HOME/.local/share/blesh/ble.sh" --attach=none --rcfile "$HOME/.blerc"
# 通常の設定は間に書きます。
# .bashrc の末端近くに以下を記述します。
[[ ! ${BLE_VERSION-} ]] || ble-attach
# Note: ble-0.2 以前では代わりに以下を記述して下さい。
#[[ $- == *i* ]] && source -- "$HOME/.local/share/blesh/ble.sh" --noattach --rcfile "$HOME/.blerc"
#((_ble_bash)) && ble-attach~/.blerc または ~/.config/blesh/init.sh に ble.sh 専用の設定を記述します。
例えば以下のようにして設定コマンドを並べます。
~/.blerc は Bash スクリプトとして source されるので、
通常のコマンドや if, while などの制御構文を使うことができます。
# blerc (例)
bleopt char_width_mode=east
bleopt input_encoding=UTF-8
bleopt edit_bell=vbell vbell_{default_message=' BEL ',duration=3000,align=right}1.2.1 関数 bleopt [name[=value|:=value|+=value|-=value]...] ―設定変数の設定―†
現在の設定を表示、または設定を変更するのに使う関数です。
引数無しで呼び出すと、全ての設定変数について現在の設定を出力します。
name=value の形式の引数を指定すると、既存の設定変数 name に値 value を設定します。
設定変数 name が存在しない場合はエラーとなります。
value に無効な値を指定した場合はエラーとなります。
name:=value の形式の引数を指定すると、設定変数 name がなければ新しく作成し、値 value を設定します。
name の形式の引数を指定すると、その設定変数の現在の値を出力します。
設定変数 name が存在しない場合はエラーとなります。
name+=value 及び name-=value の形式は、既存の設定変数 name をコロン区切りのオプションとして見て、値を追加・削除します。
次節1.3で中でも基本的な設定変数について説明します。 それ以外の設定変数は関連する各記述の場所において説明します。
1.2.2 関数 blehook [hook_name+=shell-command] (v0.4) ―フックの設定―†
指定した名前のフックに対してハンドラを追加します。 引数を何も指定しなかった場合は現在登録されているフックとハンドラの一覧を出力します。
# ハンドラの登録
blehook hook_name+=shell-command
# ハンドラの削除
blehook hook_name-=shell-command
# 未登録の場合、ハンドラを登録
blehook hook_name!=shell-command
# 既存の重複を削除し、末尾にハンドラを追加
blehook hook_name-+=shell-command
# 既存の重複を削除し、先頭にハンドラを追加
blehook hook_name+-=shell-command
# ハンドラの設定 (既存のハンドラは破棄)
blehook hook_name=shell-command
# フックとハンドラの一覧
blehook基本的なフック名として以下のものが用意されています。
| フック名 | 引数 | 説明 |
|---|---|---|
PRECMD |
なし | プロンプト更新時 (PROMPT_COMMAND の直前) |
ADDHISTORY |
コマンド | コマンド履歴に行を追加する時 (終了ステータスが失敗の時、履歴追加がキャンセルされます) |
PREEXEC |
コマンド | コマンド実行直前 |
POSTEXEC |
コマンド | コマンド実行直後 |
ERREXIT |
コマンド | コマンド実行直後、終了ステータスが非零の時 |
CHPWD |
なし | コマンド実行終了後にカレントディレクトリ $PWD が変化していた時 |
EXIT |
なし | Bash が終了する時 |
ATTACH |
なし |
ble.sh が attach した直後 |
DETACH |
なし |
ble.sh が detach する直前 |
PRECMD, PREEXEC, POSTEXEC, ERREXIT フックでは、前のコマンドの PIPESTATUS が格納された配列変数 BLE_PIPESTATUS を参照できます。
[ Note: 開発中に存在した ERR フックは ble-0.4-devel3 (2022-08-22) にて ERREXEC に改名されました。 ]
例えば、現在のコマンドがコマンド履歴に登録されるのをキャンセルするには、ADDHISTORY フックを用いて以下のように設定します。
# blerc
function my/addhistory.hook {
local command=$1 pattern='<パターン>' # <-- <パターン> に登録をキャンセルするコマンドのパターンを指定します
[[ $command != $pattern ]]
}
blehook ADDHISTORY=my/addhistory.hook或いは、実際に実行されたコマンドを変換・調整してコマンド履歴に登録するには、自動的な履歴の登録をキャンセルし代わりに手動で履歴項目を追加します。 If one wants to register a transformed command instead of the real command that has been executed, one can cancel the addition and instead manually add a history entry:
# blerc
function my/addhistory.hook {
local command=$1
history -s "$(transform "$command")" # <-- 手動で履歴に文字列を登録します (transform は変換・調整を行う仮のコマンド名です)
return 1 # <-- 常に ble.sh による履歴登録はキャンセル
}
blehook ADDHISTORY=my/addhistory.hook1.3.1 設定変数 char_width_mode (曖昧文字幅)†
# 既定値
bleopt char_width_mode=auto # ble-0.3以降
bleopt char_width_mode=east # ble-0.2以前設定 char_width_mode を用いて、曖昧文字幅を持つ文字 (Unicode 参考特性 East_Asian_Width が A (Ambiguous) の文字) の幅を制御できます。
現在は 4 つの選択肢 emacs, west, east, 'auto' が用意されています。
設定値 west を指定した場合、全ての曖昧文字幅を 1 (半角) と解釈します。
設定値 east を指定した場合、全ての曖昧文字幅を 2 (全角) と解釈します。
設定値 emacs を指定した場合、GNU Emacs における既定の文字幅と同じ物を使います。
設定値 musl を指定した場合、2014年時点の musl C 標準ライブラリの wcwidth に等価な表を用います (最近の musl はより Unicode に近いので west または east を使用してください)。
設定値 auto を指定した場合、モードを端末とのやり取りに基づいて自動判定します。
既定値は auto です。この設定変数は、利用している端末の振る舞いに応じて適切に設定する必要があります。
例えば west に設定する場合は以下の様にします:
bleopt char_width_mode='west'1.3.2 設定変数 input_encoding (文字コード)†
設定 input_encoding は入力の文字コードを制御するのに使います。現在 UTF-8 と C のみに対応しています。
設定値 C を指定した場合は、受信したバイト値が直接文字コードであると解釈されます。
既定値は UTF-8 です。C に設定を変更する場合には以下の様にします:
bleopt input_encoding='C'1.3.3 設定変数 pager (v0.2)†
# 既定値
bleopt pager=ble.sh が情報を表示するに使用するページャを指定します。
この値が空文字列の時、シェル変数 $PAGER の値が使用されます。
シェル変数 $PAGER も空文字列の時、
less, pager, more, cat の順にコマンドが試されます。
1.3.4 設定変数 editor (v0.4)†
# 既定値
bleopt editor=この設定は編集関数 edit-and-execute (C-x C-e) または
設定 bleopt line_limit_type=editor で用いるエディタを指定します。
例えば、emacs -nw, vim, nano などの値が考えられます。
この設定が空文字列の時、代わりにシェル変数 VISUAL の設定が使われます。
VISUAL も空の時はシェル変数 EDITOR が使われ、
それも空の場合は emacs -nw, vim, nano の中から使用可能なコマンドが選択されます。
使用可能なコマンドもない場合は、vi が試みられます。
コマンドラインに改行が含まれている場合、複数行モード (MULTILINE モード) になります。
C-v C-j または C-q C-j または (Emacs 編集モードで) M-RET とすると改行をコマンドラインの一部として入力できます。 複数行モードでは、RET (C-m) はコマンドの実行ではなく新しい改行の挿入になります。 複数行モードでは、C-j を用いてコマンドを実行して下さい。
shopt -s cmdhist が設定されているとき (既定)、もし RET (C-m) を押した時にコマンドラインが構文的に閉じていなければ、コマンドの実行ではなく改行の挿入を行います。
ble.sh には Bash 既定の Readline と同様に Emacs 編集モード (既定) と Vim 編集モードがあります。
.bashrc (もしくは .blerc) に set -o vi が設定されているとき、または .inputrc に set editing-mode vi が設定されているとき、Vim 編集モードが有効になります。
Vim モードの簡単な設定については Vimモードの導入 を御覧ください。
[ 日本語 | English ] ≫ 説明書 [§1 基本 | §2 描画 | §3 束縛 | §4 編集 | §5 Emacs | §6 Vim | §7 補完 | §8 他 | 索引]