У .vimrc `set nocompatible` абсолютно марний?


77

Кілька користувачів у цьому епічному питанні додали наступне .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йде в a .vimrc, це означає, що .vimrcфайл існує, здається, робить його безглуздим.


Nope: Виправлено кілька помилок з режимом вставки та клавішею видалення для мене на моєму rhel5 box
Stephan

Відповіді:


64

Якщо це загальносистемний vimrc, цей параметр не буде вимкнено. Отже, якщо ви змінюєте загальносистемний vimrc і хочете його, вам потрібно встановити його.

З розділу документації * compati-default * (курсив мій):

Коли Vim запускається, увімкнено опцію "сумісний". Це буде використано, коли Vim розпочне свою ініціалізацію. Але як тільки буде знайдено файл користувача vimrc або файл vimrc у поточному каталозі або встановлено змінну середовища "VIMINIT", для нього буде встановлено значення "несумісний".

Інша відмінність полягає в тому, що явне встановлення 'nocompatible' замінює виклик vim прапором -C .

У будь-якому іншому сценарії, так, установка "nocompatible" у вашому vimrc є noop.

Зрештою, я думаю, що це лише питання "краще безпечно, ніж шкодувати".


1
Блін, не вдалося пов’язати безпосередньо з -Cпрапором. Принаймні в моєму браузері (Chrome 10, Windows 7) він переходить на -cпрапор. Отже, я зв’язав те, -Dщо знаходиться трохи вище. :(
R. Martinho Fernandes

1
:set nocompatibleу .vimrc, здається, змінює деякі налаштування, наприклад, це передбачає :set noshowcmd. Але я не знаю чому.
Мартін фон Віттіх

22

Багато людей діляться своїми файлами .vimrc на GitHub, і я іноді перевіряю налаштування, не замінюючи свій файл .vimrc. vim дозволяє мені це робити за допомогою прапора -u.

vim -u test_vimrc

З vim ": допомога несумісна"

(Примітка: Це не трапляється для загальносистемного файлу vimrc або gvimrc, а також для файлу, заданого з аргументом | -u |).

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


4
Це дуже важливий момент. Нещодавно я навчився цього важким шляхом. Якщо ви використовуєте -u, за замовчуванням сумісний увімкнено. Як результат, vim -u ~ / .vimrc насправді не те саме, що дозволити vim самостійно завантажувати ваш ~ / .vimrc - якщо ви не додасте в "set nocompatible".
Dan

3
Файли конфігурації Vim без включеного несумісного можна завантажити, vim -Nu test_vimrcоскільки -N вказує режим несумісного.
Чад Скітерс,

Так. Vim в ідеалі мав би прапор --testvimrc, який просто слідував би (не) сумісним налаштуванням самого .vimrc. Це просто заплутано і мало користі, якщо прапор, який завантажує налаштування, змінює одне з можливих налаштувань. -u та -Nu обидва служать певній меті, але жоден з них не перевіряє повністю .vimrc.
Дан,

8

Я використовував vim у Cygwin на віртуальній машині Windows, і кожного разу, коли я знаходився в режимі вставки, натискання клавіш зі стрілками приводило до друку vim на екрані замість прокрутки "A", "B", "C" або "D". Я знайшов форум, який сказав, що переведення vim у несумісний режим це виправить. На щастя, так і сталося.

Я помістив "set nocompatible" у свій файл ~ / .vimrc, і проблема залишається зниклою. Тож, можливо, це не на 100% марно.


6
Не потрібно нічого класти ~/.vimrc. Сам факт існування цього файлу переведе vim у несумісний режим. Спробуйте, mv ~/.vimrc ~/.vimrc.bakстворіть резервну копію поточного файлу .vimrc і створіть порожній touch ~/.vimrc. Тепер відкрийте vim і подивіться, що станеться.
Johnny Baloney

7
О, побічні ефекти, як ми дорожимо тобою.
Ден Бешард

@JohnnyBaloney Ну, я можу сказати вам, "що відбувається" тут, на Ubuntu. Те, що сказав Ретсігам, справедливо і для цього дистрибутиву: без set nocompatible, vi - це кошмар для навігації за допомогою клавіш курсору. Коли я спробував ваш тест, мені моментально знову прийшов той самий кошмар із цим порожнім .vimrc. Але, тим не менше, ви мали рацію протягом усього. :-) Дивіться додаткову відповідь про мої нещодавні висновки.
syntaxerror

Ця відповідь є прикладом «знайшов форум , який сказав ... [встановити nocompatible]» І це насправді цей форум :)
Wyck

0

Виходячи з того, що Джонні вказав вище, я просто був здивований, коли я просто дізнався ЦЕ:

$ 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

АРГУ !!!

Ні, я цього НЕ очікував. Debian (або Debian Unstable, відомий як Ubuntu) справді НАСТУПАЄ кошмар своїм користувачам, замінюючи налаштування за замовчуванням на сумісний набір . Я сподіваюся, що ви тепер будете знати, чому, коли ви приїжджаєте з FreeBSD, перше, що вам доведеться зробити, це перевизначити загальносистемні налаштування, поставивши a set nocompatibleу свій ~/.vimrc. Тому що в іншому випадку ви просто створили б літери, замість того, щоб мати можливість рухати курсор так, як звикли.

Я думаю, це жахлива ідея. Іншими словами, цей set compatibleрядок повинен бути видалений із загальносистемної системи vimrc.tinyяк у Debian, так і в Ubuntu, оскільки це дратуватиме нових користувачів, які (ще) не настільки розумні, як знання того, як змусити працювати курсорні клавіші. Такі речі змушують їх nanoта інших через цілковито безглузді блокатори!

Я б дуже хотів поговорити з чуваком, який колись поширив цю зміну до загальносистемного файлу ресурсів у Debian. І, можливо, також людям, які визнали його зміни у повній мірі.

Джонні має рацію: на вашому приватному ПК ви можете видалити вказаний рядок із загальносистемного .vimrc (якщо є) і торкнутися порожнього .vimrc на своєму $ HOME . Велике спасибі за вказівку, що, набагато менше безладу знову. Зверніть увагу, що ви ПОВИННІ мати це ~/.vimrc(навіть якщо порожнє!), Оскільки в іншому випадку ви не зможете використовувати курсори без явного введення set nocompatible.


1
Коментарі в vimrc.tinyпояснюють, що це джерело лише тоді, коли ви викликаєте vim as vi, і в цьому випадку має сенс vim намагатися бути сумісним з vi. Цей файл не створюється під час запуску vim, і пов’язаний vimrcфайл у тому ж каталозі їх не включає. Все це пояснюється в коментарях до vimrc.tinyзнайденого вами файлу.
Mark Stosberg
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.