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 で確認できる.

公式リポジトリから Vim をインストールした場合の話

多くの Linux ディストリビューションでは, 公式リポジトリから Vim をインストールすると, デフォルトで使いやすく設定された .vim も同時に配布されるようだ.
例えば Ubuntu 16.04 公式のリポジトリから apt で Vim をインストールした場合, /usr/share/vim/vim74/debian.vim

set backspace=indent,eol,start  " more powerful backspacing

という記述がある.

参考ページ

vi.stackexchange.com

上記ページは start の説明が, なぜか, start を書かない場合の動作の説明になっているので注意.