LoginSignup
54
37

More than 3 years have passed since last update.

set nocompatibleはもういらない

Last updated at Posted at 2014-07-19

半ばおまじないと化したset nocompatible

.vimrcを書くときに、僕達初心者は色々なサイトを巡って「これが良さそうだな」とか「これはみんな書いてるから書いとこう」とか考えて、設定をちまちま書いていく。
そのなかで、この設定を書く人も多いだろう。

.vimrc
set nocompatible

このコマンドは、vi互換の動作を無効にするコマンドである。

vim-jp/issuesの中での言及

さて、この設定について、こんなissueがあった。
compatible について解説したほうが良いか? #471
それに関連する形で、このURLが張られている。(issue内URLはリンク切れのため同等記事掲載)
vim-jp » Hack #179: ‘cpoptions’, ‘compatible’について知る

また、vim-jpによる日本語マニュアルには、こう書いてある。

'compatible' 'cp' 'nocompatible' 'nocp'
'compatible' 'cp' 切替 (既定では オン、ファイル|vimrc|または|gvimrc|が発見されたらオフ)
グローバル
{Vi にはない}
VimをなるべくVi互換にするか、便利な機能を使えるようにするかを決定する。
これは、特別な種類のオプションである。このオプションの値が変更されると、それに伴って他のオプションも変更されるからだ。
*注意: このオプションを変更すると、予期しない効果が数多く現れる。キーマップの解釈は変わり、アンドゥも違った方法で行われる、等々。このオプションをファイル vimrc 内で設定するなら、一番先頭に置くこと。
既定ではオンなので、その他のオプションにはViの既定値が使われる。この既定値は、VimをViと全く同じように使うことを望み、オプション 'compatible'について知りもしない、または知りたいとも思わない人たちのためのものである。
Vimが立ち上がる間にファイル |vimrc| または |gvimrc| が見つかると、このオプションはオフにされ、その他のオプションで変更されていないものは、みなVimの既定値に設定される。要するに、Vimはファイル |vimrc| または|gvimrc| が存在するならVimの既定値を、存在しないならViの既定値を使うのだ ( Note: システム全体用のファイルvimrc や引数|-u|で指定されるファイルは関係ないことに注意)。|compatible-default| と |posix-compliance| も参照。

http://vim-jp.org/vimdoc-ja/options.html#'compatible'より

どうやら、.vimrcが存在するする時点でnocompatibleが成されているのと同じらしい。
ならば、自前の.vimrcがあるのなら、わざわざ先頭でset nocompatibleする必要はないということだ。

NeoVimではどうなのか?

では、NeoVimではどうなのだろう。

調べてみると、そもそも compatible コマンドが消えており、かわりに cpoptions にて挙動を指定するようになっている。

https://neovim.io/doc/user/options.html#'cpoptions'

'cpoptions' 'cpo' cpo
'cpoptions' 'cpo' string (Vim default: "aABceFs",
Vi default: all flags)
global
A sequence of single character flags. When a character is present
this indicates Vi-compatible behavior. This is used for things where
not being Vi-compatible is mostly or sometimes preferred.
'cpoptions' stands for "compatible-options".
Commas can be added for readability.
To avoid problems with flags that are added in the future, use the
"+=" and "-=" feature of ":set" |add-option-flags|.

(「かわりに」とは書いたものの、このオプションはVimにも存在している)

また、以下のissueにおいて、「set nocompatible を導入することでAPIの互換性を維持していくことは難しい」と述べられている。

確証はないが、NeoVimにおいては ~/.vimrc があろうが無かろうが、Vimにおける set nocompatibleが効いた状態になっているのだろう。

元記事

.vimrcのset nocompatibleのお話とごめんなさいな話

54
37
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
54
37