-
-
Notifications
You must be signed in to change notification settings - Fork 110
Vi (Vim) 編集モード
💬
日本語 ❙ English次の方法の内一つを用いてvi/Vim編集モードを有効にして下さい。
~/.inputrc
内
$if Bash
set editing-mode vi
$endif
他の方法として,set -o vi
を~/.bashrc
内で記述するというのもあります。
if [[ $- == *i* ]]; then # 対話セッション内か判定
set -o vi
fi
又は,次の設定によってもvi/Vimモードを有効にできます。
if [[ $- == *i* ]]; then # 対話セッション内か判定
bind 'set editing-mode vi'
fi
ble.sh
を読み込んだ後であれば,次の設定によってもまたvi/Vimモードを有効にできます。
この設定は,これ以前の設定を全て上書きします。
つまりset -o emacs
といった設定等々は全て上書きされます。
if [[ $- == *i* ]]; then # 対話セッション内か判定
# ... ble.shを読み込んだ後で ...
bleopt default_keymap=vi
fi
ESC
に対する総待ち時間は,端末からBashへ向かう処理中全ての待ち時間を合計したものです。
各待ち時間の設定を次に示します。
疑似端末の入力処理における待ち時間はstty
を用いて制御します。
普通,既定の待ち時間は0
です。
次の指令によって待ち時間を変更できます。
指定は0.1秒単位です。
# ~/.bashrc内
stty time 0
Bash-4.3以降においては,readline変数keyseq-timeout
によってReadlineの待ち時間を設定できます。
readline変数はファイル~/.inputrc
において指定できます。
指定はミリ秒単位です。
# ~/.inputrc内
$if Bash
set keyseq-timeout 1
$endif
~/.inputrc
内で指定する代わりに,~/.bashrc
内でも次の指令を用いてreadline変数の値を変更できます。
# ~/.bashrc内
bind 'set keyseq-timeout 1'
端末多重化装置 (terminal multiplexer) を用いている場合,その端末多重化装置にも待ち時間が設定されています。
GNU Screen用の待ち時間は,~/.screenrc
において次のように設定できます。
指定はミリ秒単位です。
加えて,エスケープ文字で始まるキー束縛をbindkey -t
によって定義しないでください,というのも-t
オプションはエスケープ文字の待ち時間を無効にしてしまうからです。
# ~/.screenrc内
maptimeout 1
Tmux向けの待ち時間は~/.tmux.conf
において設定できます。
指定はミリ秒単位です。
# ~/.tmux.conf内
set -sg escape-time 1
Vi/Vimモードにおいては,-- INSERT --
(挿入モードに対して)~
(ノーマルモードに対して)といったモード名が表示されます。
keymap_vi_nmap_name
オプションによって,ノーマルモードに対するモード名を変更できます。
bleopt keymap_vi_nmap_name:=$'\e[1m-- NORMAL --\e[m'
ノーマルモードにおいてモード名を表示したくない場合,前の代わりに次のように設定して下さい。
bleopt keymap_vi_nmap_name:=
各モードに移行した際に送られる制御シーケンスをterm_vi_?map
bleopt変数で指定できます。
例えば,DECSCUSR
に幾らか対応している端末を使用している場合,次のように設定することでモード毎にカーソル形状が切り替わるようにできます。
bleopt keymap_vi_nmap_cursor:=2
bleopt keymap_vi_imap_cursor:=5
bleopt keymap_vi_omap_cursor:=4
bleopt keymap_vi_xmap_cursor:=2
bleopt keymap_vi_cmap_cursor:=0
端末がSs
要素に実際は対応している場合(terminfo
には表示されません),次のようにしてble.sh
の端末情報を直接に書き換えられます。
_ble_term_Ss=$'\e[@1 q'
SP
へは既定でmagic-space
が割り当てられており,空白を挿入する前に履歴展開が実行されます。
履歴展開なしに単に空白を挿入したい場合は,次の設定を追加してください。
ble-bind -m vi_imap -f 'SP' 'self-insert'
C-k
は既定でkill-forward-line
に割り当てられています。
<C-k>{文字1}{文字2}
のようにダイグラフを入力したい場合は,次の設定を追加してください。
ble-bind -m vi_imap -f 'C-k' 'vi_imap/insert-digraph'
C-o
は既定でvi_imap/single-command-mode
に割り当てられています。
C-o
を押下することで現在の指令行を実行し,次の履歴項目を読み込みたい場合,次の設定を追加してください。
ble-bind -m vi_imap -f 'C-o' 'accept-and-next'
あるいは,C-o
の替わりにC-@
をaccept-and-next
に束縛するほうがいいかも知れません。
ble-bind -m vi_imap -f 'C-@' 'accept-and-next'
ble.sh
の機能は一部github.com:tpope/vim-surroundに由来しています。
surround.vim
由来の機能を用いるにはble.sh
を読み込んだ後に次行を追加します。
source "$_ble_base/lib/vim-surround.sh"
現在,ys
, yss
, yS
, ySS
, cs
, ds
, vS
, vgS
にのみ対応しています。
vim-surround.sh
実装では,
bleopt
変数と共に用いることで,ys
・cs
の束縛に対する括弧の種類を変更できます。
設定例を次に示します。
bleopt vim_surround_45:=$'$( \r )' # ysiw-に対して
bleopt vim_surround_61:=$'$(( \r ))' # ysiw=に対して
bleopt vim_surround_q:=\' # ysiwqに対して
bleopt vim_surround_Q:=\" # ysiwQに対して
vim_surround_〈数字〉
形式のble設定変数によって,〔ysiw
等に続く〕十進記数された〈数字〉
番号のUnicode文字として束縛できます。
vim_surround_〈英字〉
形式のble設定変数によって,〔ysiw
等に続く〕〈英字〉
文字として束縛できます。
値にCR
(Bashスクリプト中では$'\r'
)が含まれる場合,当値は最初に出現するCR
を境に二分割され,
それぞれが左右の囲み文字に用いられます。