Skip to content
Koichi Murase edited this page Jan 31, 2024 · 14 revisions

[ 日本語 | English ]

キー設定

⌨ (key-chord.elvim-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 などがございます。

参考文献:

⌨ 非逐次検索 (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'

着色設定

🎨 ファイル名の描画設定に$LS_COLORS変数の設定を取り込みたい
# blerc
bleopt filename_ls_colors="$LS_COLORS"

参考:

S

🎨 SGR形式の描画属性指定を使いたい
# blerc
ble-face filename_directory=sgrspec:'1;34'

参考: R

補完設定

⚙️ 自動補完を無効にしたい
# blerc
bleopt complete_auto_complete=

参考: Q

⚙️ 自動補完に遅延を設定したい
# 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=white,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

⚙️ 大文字・小文字の違いを無視して補完したい
# blerc
bind 'set completion-ignore-case on'

参考: Q

⌨ メニュー補完を中止するには?

C-g を押してください。

参考: Q

プロンプト設定

⚙️ 終了ステータスの標示 [ble: exit 〈番号〉] を消したい
# blerc
bleopt exec_errexit_mark=

既定では、コマンドが非零の終了ステータスで終わった場合、[ble: exit 〈番号〉] のような行を出力します。 この挙動を止めるには、ble 設定変数 exec_errexit_mark の値を空にしてください。

参考: Q

⚙️ Vim編集モードでモード表示行を消すたい

参照: comment

⚙️ 現在のvimモードをプロンプト内に表示したい

参照: comment

⚙️ p10k の過渡プロンプト(transient prompt)を実現したい

参照: comment

⚙️ コマンド実行時間をプロンプトに表示したい

参照: comment

⚙️ 起動している複数のBash間で履歴を共有したい
# blerc
bleopt history_share=1

参考: S


[ 日本語 | English ]