tl; dr:これをvimrcに追加して、他のほとんどのプログラムと同じようにバックスペースを機能させます。
set backspace=indent,eol,start
長い答え
デフォルトの動作は驚くべきことかもしれませんが、「機能しない」バックスペースは機能と見なすことができます。誤ってインデントを削除したり、現在の行や挿入の開始に制限することでテキストを削除しすぎたりするのを防ぐことができます。
:help 'backspace'
私たちに伝えます:
Influences the working of `<BS>`, `<Del>`, `CTRL-W` and `CTRL-U` in Insert
mode. This is a list of items, separated by commas. Each item allows
a way to backspace over something:
value effect
indent allow backspacing over autoindent
eol allow backspacing over line breaks (join lines)
start allow backspacing over the start of insert; CTRL-W and CTRL-U
stop once at the start of insert.
それでは、これらの値は正確に何を意味するのでしょうか?
インデント
Vimは多くのファイルタイプに自動インデントを追加します。デフォルトでは、
これをバックスペースすることは許可されていません。「自動インデント」と見なされるもののルールは、たとえば、これを入力する場合(█はカーソル)、多少微妙です:
if :; then
█
バックスペースは機能しません。
我々は、コマンドを追加してしまう場合でもfi
、最大戻って、我々がされている
インデントを削除することができ:
if :; then
█:
fi
これは、最初の例では、Enterキーを押したときにVimが1レベルのインデントを追加する必要があると判断したためです。ただし、2番目の例では、Vimは何も自動インデントしませんでした。タブ文字またはいくつかのスペースです。
こちらもご覧ください :help 'autoindent'
eol
これは最も明白なはずです。Backspaceを押すとEOLマーカー(\n
または\r\n
)も削除されます。無効にすると、EOLマーカーを削除しようとしてもBackspaceは何もしません。
start
これは、挿入モードが開始されてから挿入したテキストのみを削除でき、以前に挿入されたテキストは削除できないことを意味します。
それでは、デフォルト設定は何ですか?
WindowsでGVIMを使用してこれに気付きました。ただし、ほとんどのLinuxシステムで端末からVIMを使用している場合、バックスペースは期待どおりに動作するようです。
これは、多くのLinuxディストリビューションには、いくつかの一般的なオプションを設定する既製のvimrcファイルが付属しているためです。たとえば、私が持っているArch Linuxシステムでは/usr/share/vim/vimfiles/archlinux.vim
:
set nocompatible
set backspace=indent,eol,start
" ... and a few more...
VimをWindowsにインストールする場合、デフォルトでは、Vimに同梱されているデフォルトのvimrcおよびgvimrcが使用されます。
Vimの既定値は空の値ですbackspace
。Arch Linux、Debian、CentOS、または$other_distro
デフォルトは異なる場合があります。
ノーマルモード
この質問は、挿入モードのBackspaceについてですが、通常モードのBackspaceについても簡単に説明します。
通常モードでは、Backspaceはとして機能h
し、左に移動します。
デフォルトでは、行の先頭にある場合、バックスペースは前の行に移動します(にあったかのようeol
にbackspace
)。この動作は'whichwrap'
、b
フラグ(デフォルトで有効)を介したオプションで制御できます。
X
コマンドにマッピングすることにより、バックスペースで文字を削除することもできます。
nnoremap <BS> X
X
(およびで削除x
)で行われますが、実際にやりたいことはdb
、たとえば単語の先頭までdaw
削除すること、単語全体を削除することなどです。必要以上の場合に最適でないキー。