-
-
Notifications
You must be signed in to change notification settings - Fork 86
説明書 §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" install
1.2 設定方法†
設定の一例です。~/.bashrc
に以下のように記述します。
# bashrc
# .bashrc の先頭近くに以下を記述します
[[ $- == *i* ]] &&
source "$HOME/.local/share/blesh/ble.sh" --noattach --rcfile "$HOME/.blerc"
# 通常の設定は間に書きます。
# .bashrc の末端近くに以下を記述します。
[[ ! ${BLE_VERSION-} ]] || ble-attach
# Note: ble-0.2 以前では代わりに以下を記述して下さい。
#((_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]...]
―設定変数の設定―†
現在の設定を表示、または設定を変更するのに使う関数です。
引数無しで呼び出すと、全ての設定変数について現在の設定を出力します。
name=value
の形式の引数を指定すると、既存の設定変数 name
に値 value
を設定します。
設定変数 name
が存在しない場合はエラーとなります。
value
に無効な値を指定した場合はエラーとなります。
name:=value
の形式の引数を指定すると、設定変数 name
がなければ新しく作成し、値 value
を設定します。
name
の形式の引数を指定すると、その設定変数の現在の値を出力します。
設定変数 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.hook
1.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 他 | 索引]