Help us understand the problem. What is going on with this article?

set nocompatibleはもういらない

More than 1 year has passed since last update.

半ばおまじないと化した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の互換性を維持していくことは難しい」と述べられている。

https://github.com/neovim/neovim/issues/503#issuecomment-41591214

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

元記事

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

yu_suke1994
帰って寝たい
https://unasuke.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした