В .vimrc, `set nocompatible` полностью бесполезен?

Несколько пользователей в этом эпическом вопросе добавили следующее в .vimrc:

" Necesary for lots of cool vim things
set nocompatible

Но действительно ли это необходимо? Из документов:

'compatible' 'cp'
    boolean (default on, off when a |vimrc| or |gvimrc| file is found)

Если set nocompatible идет в .vimrc, это означает, что существует файл .vimrc, кажущийся его бессмысленным.

Ответ 1

Если это общесистемный vimrc, эта опция не будет отключена. Итак, если вы меняете общесистемный vimrc и хотите его, вам нужно установить его.

В разделе документации * compatible-default * (выделено мной):

Когда Vim запускается, "совместимый" опция включена. Это будет использоваться, когда Vim начинает инициализацию. Но как только будет найден пользовательский файл vimrc, или файл vimrc в текущем или "VIMINIT" задана переменная окружения, она будет быть установленным в "nocompatible" .

Другим отличием является то, что явно устанавливаются "nocompatible" overrules, вызывающие vim с флагом -C..

В любом другом сценарии да, установка "nocompatible" в вашем vimrc является noop.

В конце концов, я думаю, что это просто вопрос "лучше, чем сожалеть".

Ответ 2

Многие люди делят свои файлы .vimrc на GitHub, и я иногда проверю настройки без замены моего .vimrc файла. vim позволяет мне делать это с флагом -u.

vim -u test_vimrc

Из vim ": help nocompatible"

(Примечание. Это происходит не для общесистемного файла vimrc или gvimrc, ни для файла, заданного с | -u | аргумент).

Это означает, что если вы делитесь своим .vimrc с кем-то, и они используют флаг -u для загрузки вашего файла, vim не будет настроен так же, как если бы файл был назван .vimrc и расположен в вашем домашнем каталоге.

Ответ 3

Я использовал vim в Cygwin на виртуальной машине Windows, и каждый раз, когда я был в режиме Insert, нажатие клавиш со стрелками приводило к тому, что на экране вместо vim печатались "A", "B", "C" или "D" вместо прокрутки. Я нашел форум, в котором говорилось, что установка vim в несовместимый режим исправит его. К счастью, это произошло.

Я поместил "set nocompatible" в свой файл ~/.vimrc, и проблема не исчезла. Так что, возможно, это не на 100% бесполезно.

Ответ 4

Основываясь на том, что Джонни указал выше, я был просто удивлен, когда только что нашел ЭТО:

$ cat /usr/share/vim/vimrc.tiny
" Debian system-wide default configuration Vim
set runtimepath=~/.vim,/var/lib/vim/addons,/usr/share/vim/vimfiles,/usr/share/vim/vim74,/usr/share/vim/vimfiles/after,/var/lib/vim/addons/after,~/.vim/after

set compatible

ARGH!!!

Нет, я этого не ожидал. Debian (или Debian Unstable aka Ubuntu) действительно ДОЛЖНЫ поставить кошмар своим пользователям, переопределив настройку по умолчанию с помощью установить совместимый. Я надеюсь, что теперь вы узнаете, почему, когда вы идете из FreeBSD, первое, что вам нужно сделать, это переопределить общесистемную настройку, поместив set nocompatible в свой собственный ~/.vimrc. Потому что иначе вы просто создадите буквы, а не сможете перемещать курсор так, как вы привыкли.

Я думаю, что это ужасная идея. Другими словами, эта строка set compatible должна быть удалена из общесистемного vimrc.tiny как в Debian, так и в Ubuntu, потому что это будет раздражать новых пользователей, которые пока не так умны, как знание как заставить клавиши курсора работать. Такие вещи заставляют их nano и другие из-за таких совершенно бессмысленных блокировщиков!

Мне бы очень хотелось поговорить с чуваком, который однажды распространил это изменение на общесистемный файл ресурсов в Debian. А может быть, и людям, которые в полной мере признали его изменение.

Джонни прав: на вашем персональном компьютере вы можете удалить указанную строку из общесистемного .vimrc(если есть) и коснуться пустого .vimrc на $HOME. Большое спасибо за то, что указали на это, а затем снова загромождали. Обратите внимание, что вы ДОЛЖНЫ иметь это ~/.vimrc (даже если пусто!), Так как иначе вы не сможете использовать курсоры без явного ввода set nocompatible.