Vim/NeoVim でインサートモード中に Backspace キーや CTRL-W で文字を削除するときの振る舞いを変更する (backspace)

backspace オプション(Vim の場合)

Vim エディタでは、インサートモード中に Backspace キーを押すと、入力した文字が削除されますが、デフォルトではインサートモードに入ったカーソル位置より前の文字を削除することはできません。 代表的な削除系のキー入力は、下記のような振る舞いをします。

  • Backspace: カーソル位置の直前の 1 文字を削除する。ただし、インサートモードに入ったときのカーソル位置までしか削除できない。
  • CTRL-W: カーソル位置の直前の 1 単語を削除する。ただし、インサートモードに入ったときのカーソル位置までしか削除できない。
  • CTRL-U: カーソル位置からインサートモードに入ったときのカーソル位置までを削除する。

backspace オプションを設定すると、上記のようなキー入力によって削除可能な文字の範囲を広げることができます。 backspace オプションには次のような値をカンマ区切りで設定します。

  • indent: オートインデント機能で挿入されたスペースを削除できる
  • eol: 改行を削除できる(前の行に遡って削除していける)
  • start: インサートモードに入ったときのカーソル位置よりも前の文字を削除できる(ただし、CTRL-WCTRL-U による削除は、インサートモードに入ったカーソル位置までで削除範囲が一度止まる)
設定例 (~/.vimrc)
" インサートモード中の BS、CTRL-W、CTRL-U による文字削除を柔軟にする
set backspace=indent,eol,start

上記のように設定しておくと、それぞれの削除系のキー入力の振る舞いは下記のように変化します。

  • Backsapce: カーソル位置の直前の 1 文字を削除する。インサートモードに入った時のカーソル位置よりも前の文字を削除できる。
  • CTRL-W: カーソル位置の直前の 1 単語を削除する。インサートモードに入った時のカーソル位置よりも前の単語を削除できる。ただし、インサートモードに入った時のカーソル位置も単語の境界とみなす。
  • CTRL-U: カーソル位置から行頭までを削除する。ただし、インサートモードに入ったときのカーソル位置も行頭とみなす。

backspace オプション (NeoVim の場合)

NeoVim の場合は、backspace オプションの設定値が デフォルトで indent,eol,start となっているため、何も設定しなくても Backspace キーが直感的に振る舞います(編集開始位置よりも前の文字を削除できます)。