-
-
Notifications
You must be signed in to change notification settings - Fork 86
質問と回答
[ 日本語 | English ]
⌨ (key-chord.el
や vim-arpeggio
と同様の)「キーの同時押し」を束縛したい
# blerc
# 例1: j及びkを40ミリ秒間に続けて入力するとノーマルモードに移行する
ble-bind -m vi_imap -f 'j k' 'vi_imap/normal-mode'
ble-bind -m vi_imap -f 'k j' 'vi_imap/normal-mode'
ble-bind -m vi_imap -T j 40
ble-bind -m vi_imap -T k 40
# 例2: “vim-arpeggio.sh”ライブラリを用いる
source "$_ble_base/lib/vim-arpeggio.sh"
bleopt vim_arpeggio_timeoutlen=40
ble/lib/vim-arpeggio.sh/bind -m vi_imap -f jk vi_imap/normal-mode
参考: Q
⌨ エディタ(Vim)でコマンドラインを編集したい(既定のBashの vi-command
キーマップのv
と同様に)
# blerc
# 例1: Emacsモードに対して“C-x C-v”を束縛
VISUAL='vim -X'
ble-bind -m emacs -f 'C-x C-v' 'edit-and-execute-command'
# 例2: Vimモードに対して“C-x C-v”を束縛
VISUAL='vim -X'
ble-bind -m vi_imap -f 'C-x C-v' 'edit-and-execute-command'
ble-bind -m vi_nmap -f 'C-x C-v' 'vi-command/edit-and-execute-command'
参考: Q
⌨ M-right が動かない
お使いの端末における Meta キーの取り扱いを適切に設定する必要があります。 歴史的に Meta キーには二種類の取り扱いが存在します。
- Meta 文字: 一つは ASCII 外の文字 (8 bit 文字) を送信するというものです。 8 bit 文字はアクセント付きのアルファベットなど言語に依存する文字です。 例えば "Meta + A" で Á を入力するのに使います。
- Meta 修飾: もう一つは "Meta 修飾" されたキー入力 (Emacs の記法で書くと M- 修飾) をエスケープシーケンスに変換して送ります。
お使いの端末やお好みの振る舞いに応じて適切な設定をする必要があります。 以下に示すのは iTerm2 における設定例です。
-
選択肢 1 (常時 Meta 修飾): Meta キーが押された時に組み合わせるキーに関わらず常に M-… を送信する場合は、 こちらの 回答 の画像にある通り、 "Left/Right ⌥ Key" の設定を "
Esc+
" にします。 -
選択肢 2 (ファンクションキーに対してのみ Meta 修飾): 通常の組み合わせ (Meta + アルファベット・数字・記号類) については Meta 文字を送信し、 ファンクションキー (カーソルキー、Home, PageDown, Delete など) との組み合わせについては Meta 修飾されたキーを送信したい場合がこちらに該当します。 iTerm2 の設定 "Natural Text Editing" がこれを実装したものと思われます。 この設定を利用する時は、"Left/Right ⌥ Key" の設定は "Normal" に戻しておく必要があります。 この設定が思うように動かない場合は次の "選択肢3" を参考にして下さい。
-
選択肢 3 (指定したキーについてのみ Meta 修飾): 既定で Meta 文字を送信し、指定したキーとの組み合わせについてだけ Meta 修飾したキーを送信したい場合は、 それぞれのキーの組み合わせに対してエスケープシーケンスを自分で設定する必要があります。 例として特に M-right に対して特別なエスケープシーケンスを送信したい場合は、 こちらの回答 が参考になります。 この回答では
Meta + left/right
の入力に対して M-b/M-f を送信する様に設定しています。 この設定を利用する時は、"Left/Right ⌥ Key" の設定は "Normal" または "Meta" にしておく必要があります。 -
選択肢 4 ("左 ⌥" は Meta 文字、"右 ⌥" は Meta 修飾): 左右の "⌥" キーに対して別々の役割を割り当てることもできます。 例えば "左 ⌥" に対して Meta 文字を、"右 ⌥" に対しては Meta 修飾されたキー入力を送信したい時は、 "Left ⌥ Key" を "Meta" に、"Right ⌥ Key" を "Esc+" に設定します。
参考: A.
⌨ S-RET 等の特別なキーの組み合わせを使うには?
お使いの端末が modifyOtherKeys
という機能に対応している場合は、既定で特別なキーの組み合わせをお使いいただけます。
代わりに、お使いの端末が特別なキーの組み合わせに対してエスケープシーケンスを個別に設定できる場合には、
それぞれのキーの組み合わせについて以下のシーケンスをご設定下さい。
Key combination | Escape sequence | Key combination | Escape sequence |
---|---|---|---|
S-RET | ESC [ 1 3 ; 2 u | C-0 | ESC [ 4 8 ; 5 u |
C-RET | ESC [ 1 3 ; 5 u | C-1 | ESC [ 4 9 ; 5 u |
C-S-RET | ESC [ 1 3 ; 6 u | C-2 | ESC [ 5 0 ; 5 u |
S-TAB | ESC [ 9 ; 2 u | C-3 | ESC [ 5 1 ; 5 u |
C-TAB | ESC [ 9 ; 5 u | C-4 | ESC [ 5 2 ; 5 u |
C-S-TAB | ESC [ 9 ; 6 u | C-5 | ESC [ 5 3 ; 5 u |
S-SP | ESC [ 3 2 ; 2 u | C-6 | ESC [ 5 4 ; 5 u |
C-S-SP | ESC [ 3 2 ; 6 u | C-7 | ESC [ 5 5 ; 5 u |
S-BS | ESC [ 8 ; 2 u | C-8 | ESC [ 5 6 ; 5 u |
C-S-BS | ESC [ 8 ; 6 u | C-9 | ESC [ 5 7 ; 5 u |
より詳細な説明については説明書の "3.6 `modifyOtherKeys' の設定" をご参照下さい。
機能 modifyOtherKeys
に対応している端末には例えば xterm, mintty, iTerm2, foot, zutty などがございます。
参考文献:
- [Bash 3.2 in macOS] keymap 'emacs' is not defined. · Issue #33 · akinomyoga/ble.sh
- How hard would it be to turn this into one? | Hacker News
- Multiline mode exec remapping · Issue #370 · akinomyoga/ble.sh
- Manual §3 Key Binding · akinomyoga/ble.sh Wiki
- Manual A2 Terminal Settings · akinomyoga/ble.sh Wiki
⌨ 非逐次検索 (nsearch) 中に RET で即座にコマンド実行するには?
nsearch の編集関数に immediate-accept
オプションを指定します。
例えば、up/down を非逐次検索に設定している場合には、以下の様に設定を記述します。
ble-bind -f up 'history-search-backward immediate-accept'
ble-bind -f down 'history-search-forward immediate-accept'
参照: comment
⌨ 複数行モードで RET / C-m でコマンドを実行するには?
以下のキー束縛設定を指定します。
# Emacs 編集モードの場合
ble-bind -m emacs -f 'C-m' 'accept-line'
ble-bind -m emacs -f 'RET' 'accept-line'
# Vim 編集モードの場合
ble-bind -m vi_imap -f 'C-m' 'accept-line'
ble-bind -m vi_imap -f 'RET' 'accept-line'
ble-bind -m vi_nmap -f 'C-m' 'accept-line'
ble-bind -m vi_nmap -f 'RET' 'accept-line'
⌨ 一つのキーシーケンスで複数の編集関数を実行するには?
以下の例の様に、
ble/widget/編集関数の名前
という名前のシェル関数として新しい編集関数を定義し、
その中で複数の編集関数を呼び出すことができます。
既存の標準の編集関数と名前が重複しない様に、
編集関数の名前は ユーザー名/
, my/
, blerc/
, dotfiles/
などで始める事が強く推奨されます。
# C-t で複数の操作を行う例
function ble/widget/my/example1 {
ble/widget/beginning-of-logical-line
ble/widget/insert-string 'echo $('
ble/widget/end-of-logical-line
ble/widget/insert-string ')'
}
ble-bind -f C-t my/example1
⌨ 単語削除・コピー時に前についている空白も一緒に消すには?
# blerc
ble-bind -f C-w 'kill-region-or kill-uword'
ble-bind -f M-w 'copy-region-or copy-uword'
⚙️ 自動補完に遅延を設定したい
# blerc
# 例1: 300ミリ秒
bleopt complete_auto_delay=300
# 例2: 10ミリ秒
bleopt complete_auto_delay=10
🎨 自動補完候補の配色を変えたい
# blerc
# 例1
ble-face auto_complete='fg=242,bg=235'
# 例2
ble-face auto_complete='fg=231,bg=69'
# 例3
ble-face auto_complete='fg=240,underline,italic'
# 例4
ble-face auto_complete='fg=gray'
# 例5
ble-face auto_complete='fg=242,italic'
参考: Q.
⌨ 自動補完による予測候補を TAB で確定するには?
# blerc
ble-bind -m auto_complete -f C-i auto_complete/insert
ble-bind -m auto_complete -f TAB auto_complete/insert
⌨ 自動補完で M-right で挿入する単語の区切りを変えたい
設定変数 complete_auto_wordbreaks
を使って設定することができます。
# 例1: 空白類で単語を区切ります (既定)
bleopt complete_auto_wordbreaks=$' \t\n'
# 例2: 空白類に加えて / も単語の区切りとします
bleopt complete_auto_wordbreaks=$' \t\n/'
参考: A
⚙️ 終了ステータスの標示 [ble: exit 〈番号〉]
を消したい
# blerc
bleopt exec_errexit_mark=
既定では、コマンドが非零の終了ステータスで終わった場合、[ble: exit 〈番号〉]
のような行を出力します。
この挙動を止めるには、ble 設定変数 exec_errexit_mark
の値を空にしてください。
参考: Q
⚙️ Vim編集モードでモード表示行を消すたい
参照: comment
⚙️ 現在のvimモードをプロンプト内に表示したい
参照: comment
⚙️ p10k の過渡プロンプト(transient prompt)を実現したい
参照: comment
⚙️ コマンド実行時間をプロンプトに表示したい
参照: comment
[ 日本語 | English ]