- 書式
- bind [(-M | --mode) MODE] [(-m | --sets-mode) NEW_MODE] [(-k | --key)] SEQUENCE COMMAND [COMMAND...]
- 書式
- bind [(-M | --mode) MODE] [(-k | --key)] SEQUENCE
- 書式
- bind (-K | --key-names) [(-a | --all)]
- 書式
- bind (-f | --function-names)
- 書式
- bind (-e | --erase) [(-M | --mode) MODE] (-a | --all | [(-k | --key)] SEQUENCE [SEQUENCE...])
目次
概要
bind
コマンドは指定された
キーシーケンスとコマンドの
結び付け(キーバインド)を加えます。
SEQUENCE
は割り当てる文字列で
fishのエスケープシーケンスで記述されます。
たとえば、Altキーと別な文字キーXを押すと、
「ESC文字とX」が送信されますので、
Altを押しながらXは
\eX
エスケープシーケンスを使って記述できます。
たとえば、Alt+wは \ew
となります。
コントロール文字は
\c
エスケープを使って
同様に記述できます。
たとえば、Ctrl+X (^X) は
\cx
と記述できます。
注意してほしいのは
Altキーを押す場合は
大文字小文字を区別するのに対し、
Ctrlキーを押す場合は区別しないことです。
このことはあくまでも
テキストベースの端末の制限によるものであり、
fishの制限ではありません。
デフォルトのキーバインドは
- 空文字列(すなわち '') を
SEQUENCE
に記述することで設定 - 他のキーバインドにマッチしないならば
いつでも使われる - キー自身を挿入する(self-insert)関数
(つまりbind '' self-insert
)を使う場合に
意味をなす。 - コマンドラインエディタ に設定されていない
いかなるキーストロークを挿入 - コントロールシーケンスが表示される結果にはならない
-k
スイッチが使われると、キー名
(たとえば down
や up
や backspace
)が
キーシーケンスの代わりに使われます。
名前は相当するcursesの変数から
key_
プレフィクスを取り除いたものと
同じように使われます。
(それについては
man 5 terminfo
を実行して詳細を読むか、
bind --key-names
を実行して
使用できるキー名の全リストを見てください。
→bind --key-namesの実行例)
訳注:fish_key_reader を使うと、割り当てたいキーを押すだけで bind
コマンドの例が出てきて便利です!
COMMAND
はどのfishのコマンドを受け付けますが、
以下のような特別な入力関数のセットの1つも受け付けます。
- カーソル移動
- キルリング操作
- タブ補完
bind --function-names
で
入力関数の全リストが得られます。
COMMAND
がシェルスクリプトの
コマンドであるとき、
実際のコードを関数にしてから
関数名を割り当てるのが良い習慣です。
この方法は
編集中の関数のテストがとても容易になり、
たいていの場合はより可読性が上がります。
スクリプトが出力をするならば、
スクリプトは commandline -f repaint を
呼び出して終了する必要があります。
fishに適切に再描画させるために
必要だからです。
COMMAND
が複数与えられたとき、
キーが押されたら全コマンドが
指定された順番で実行されます。
SEQUENCE
が与えられなかった場合、
すべてのキーバインド
(または、指定された MODE
内のキーバインド)
が出力されます。
SEQUENCE
が与えられて、
COMMAND
が与えられなかった場合、
SEQUENCE
にマッチしたキーバインドのみが
出力されます。
デフォルトでは、
キーバインドはセッション間で
保存されません。
~/.config/fish/config.fish 内に
直接書かれた bind
コマンドは
有効になりません。
なぜなら、
デフォルトのキーバインドが設定される前に
config.fish
が読み込まれるからです。
自分用のキーバインドを保存するためには、
bind
コマンドを
fish_user_key_bindings
オートロード関数 内に
書いてください。
キーバインドは
Viの入力を模倣した「モード」を
使うこともあります。
デフォルトのモードは default
で、
すべてのキーバインドが
1つのモードに適用されます。
モードは $fish_bind_mode
変数で
参照・変更できます。
パラメータ
-k
/--key
- 文字列の代わりにキー名を
指定する(left
やbackspace
など)。 -K
/--key-names
- 有効なキー名のリストを表示する。
-a
または--all
も指定すると、
割り当てられていないキーも表示する。 -f
/--function-names
- 使える入力関数のリストを表示する。
-M MODE
/--mode MODE
bind
コマンドで指定するモードを指定する。
デフォルトはdefault
。-m NEW_MODE
/--sets-mode NEW_MODE
- このバインドが実行された後に、
現在のモードをNEW_MODE
に変更する。 -e
/--erase
- 新しいキーバインドを定義する代わりに、
与えられたキーシーケンスとモードの
キーバインドを削除する。
- 複数のキーシーケンスを指定することもできる。
-M
/--mode
とともに
-a
/--all
を指定すると、
いかなるキーシーケンスであっても
与えられたモードの全キーバインドを削除する。-M
/--mode
を付けずに
-a
/--all
を指定すると、
全モードの全キーバインドを削除する。
- 複数のキーシーケンスを指定することもできる。
-a
/--all
--erase
と--key-names
とともに使います。
特別な入力関数
accept-autosuggestion
- 現在のオートサジェスチョンを受け入れる
backward-char
- 1文字左へ移動
backward-bigword
- 1ビッグワード(ホワイトスペースで区切られた単語)左へ移動
backward-delete-char
- カーソルの左1文字を削除
backward-kill-bigword
- 1ビッグワードを削除し、 キルリング へ移動
backward-kill-line
- 行頭からカーソルまでを削除しキルリングへ移動
backward-kill-path-component
- 1パス構成要素(最後の
/
または空白からカーソル位置)を
削除しキルリングへ移動 backward-kill-word
- 1単語を削除しキルリングへ移動
backward-word
- 1単語左へ移動
beginning-of-history
- 履歴の最初へ移動
beginning-of-line
- 行頭へ移動
begin-selection
- テキスト選択を開始
capitalize-word
- 現在の単語をキャピタライズ
(先頭文字を大文字化) complete
- 現在のトークンの残りを予測
complete-and-search
- 補完のページャを起動
delete-char
- カーソル位置(右)の文字を削除
downcase-word
- 現在の単語を小文字化
end-of-history
- 履歴の最後へ移動
end-of-line
- 行末へ移動
end-selection
- テキスト選択を終了
forward-bigword
- 1ビッグワード右へ移動
forward-char
- 1文字右へ移動
forward-word
- 1単語右へ移動
history-search-backward
- 過去方向へ履歴検索
history-search-forward
- 未来方向へ履歴検索
kill-bigword
- 次のビッグワードを削除しキルリングへ移動
kill-line
- カーソルから行末までを削除しキルリングへ移動
kill-selection
- 選択されたテキストを削除しキルリングへ移動
kill-whole-line
- 行全体を削除しキルリングへ移動
kill-word
- 次の単語を削除しキルリングへ移動
suppress-autosuggestion
- 現在のオートサジェスチョンを削除
swap-selection-start-stop
- 選択を変更することなしに
ハイライトされたテキストの他端へ移動 transpose-chars
- カーソルの左右にある文字を入れ替える
transpose-words
- カーソルの左右にある単語を入れ替える
upcase-word
- 現在の単語を大文字化
yank
- 最新のキルリングの内容を
コマンドラインに挿入(ヤンク) yank-pop
- キルリングを過去のものに置き換える
実行例
# Ctrl+Dが押されたときにfishを終了する bind \cd 'exit'
# PageUpが押されたときに履歴検索をする bind -k ppage history-search-backward
# コマンドラインエディタをViモードにして set -g fish_key_bindings fish_vi_key_bindings # Ctrl+Cを現在行削除(キルリングに移動)させる bind -M insert \cc kill-whole-line force-repaint
→ Viモード
特殊な場合: ESC文字
ESCキーは単独でも使えます。
たとえば、Viモードで
挿入モード からノーマルモード に
移行するときです。
ESC文字は同時に
「メタキー」としても使われます。
「メタ」とは
ファンクションキーや矢印キーといった
エスケープシーケンスの始まりを
示すための文字です。
キーバインドは
ESC文字から始まるようにも
カスタマイズされることもあります。
fishはESC文字を受信してから
一定時間待ちます。
なぜなら、
ESC文字が単独のものなのか
エスケープシーケンスの一部なのか
を判定するためです。
待っている間にキーが押されれば、
ESCキーはメタキーとして振舞います
。
キーが押されなければ、
単独のESC文字として扱われます。
待ち時間は以下のようになっています。
- デフォルト(Emacsモード)のキーバインド では300ミリ秒(0.3秒)
- Viモードのキーバインド では10ミリ秒
- 変数
fish_escape_delay_ms
を
10〜5000ミリ秒の間に設定することで変更可能
fish_escape_delay_ms
は ユニバーサル変数 にすることが望ましいです。
なぜなら、コマンドラインで
一度設定すれば済むからです。
$ set -U fish_escape_delay_ms 200
- 注意
-
fish 2.2.0以前は
デフォルトで10ミリ秒になっていて、
変更不可能になっていました。
そのため、ESCキーをメタキーとして
使用することは事実上不可能でした。
bind --key-namesの実行例
筆者の環境(Debian GNU/Linux)では
このようになっています。
$ bind --key-names backspace dc down end f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12 home ic left npage ppage right up
bind --key-names --allの実行例
筆者の環境(Debian GNU/Linux)では
このようになっています。
$ bind --key-names --all a1 a3 b2 backspace beg btab c1 c3 cancel catab clear close command copy create ctab dc dl down eic end enter eol eos exit f0 f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12 f13 f14 f15 f16 f17 f18 f19 f20 find help home ic il left ll mark message move next npage open options ppage previous print redo reference refresh replace restart resume right save sbeg scancel scommand scopy screate sdc sdl select send seol sexit sf sfind shelp shome sic sleft smessage smove snext soptions sprevious sprint sr sredo sreplace sright srsume ssave ssuspend stab sundo suspend undo up
bind --function-namesの実行例
$ bind --function-names beginning-of-line end-of-line forward-char backward-char forward-word backward-word forward-bigword backward-bigword history-search-backward history-search-forward delete-char backward-delete-char kill-line yank yank-pop complete complete-and-search beginning-of-history end-of-history backward-kill-line kill-whole-line kill-word kill-bigword backward-kill-word backward-kill-path-component backward-kill-bigword history-token-search-backward history-token-search-forward self-insert transpose-chars transpose-words upcase-word downcase-word capitalize-word vi-arg-digit vi-delete-to execute beginning-of-buffer end-of-buffer repaint force-repaint up-line down-line suppress-autosuggestion accept-autosuggestion begin-selection swap-selection-start-stop end-selection kill-selection forward-jump backward-jump and cancel
最後までお読みいただき、ありがとうございました。参考になれば嬉しいです。