Ubuntu 16.04 でソースからビルドした Vim 8.0 のバックスペースが "たまに" 効かない
解決策
vimrc に以下を追記する:
set backspace=indent,eol,start
eol はお好みで書かなくても良いかもしれない.
あらまし
Ubuntu 16.04 で Vim 8.0 をソースからビルドした:
$ sudo apt build-dep vim $ cd /opt $ sudo git clone https://github.com/vim/vim $ cd vim $ sudo ./configure --with-features=huge \ --enable-multibyte \ --enable-gpm \ --enable-cscope \ --enable-fontset \ --enable-fail-if-missing \ --prefix=/usr/local \ --enable-luainterp=yes \ --enable-perlinterp=yes \ --enable-rubyinterp=yes \ --enable-pythoninterp=yes \ --enable-python3interp=yes $ sudo make && sudo make install
しかし使ってみると, バックスペースが "たまに" 効かないように思われた.
つまりファイルを編集している時に, バックスペースで文字が消せる場合もあれば消せない場合もある, という現象が起きた.
調べてみると, それは vi として正しい動作であったようだ.
:h 'backspace' を見ると
'backspace' 'bs' string (default "", set to "indent,eol,start" in |defaults.vim|) global {not in Vi} 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. When the value is empty, Vi compatible backspacing is used.
とある.
つまり, indent
はオートインデントで入力されたインデントを消去できるようにし, eol
は改行を消去して一つ上の行と結合できるようにし, start
は挿入モードが開始された時点を超えて (それまでに書かれていた文字も) 消去できるようにする, ということで,
デフォルト値は空, すなわち
set backspace=
に等しいということである.
というわけで, 最初に書いた設定を vimrc に追記することで, 直感的な (?) 動作のバックスペースができるようになる.
私はそれをシステム vimrc: "$VIM/vimrc" に書くことにした.
$VIM の場所は :echo $VIM で確認できる.