Як налагодити файл vimrc?


80

У мене проблема з Vim, і я думаю, що це може бути в моєму vimrcфайлі (або мені сказали, що це мій vimrcфайл).

Як мені це підтвердити? Якщо це мій vimrcфайл, як я знаю , де саме проблема полягає?

Відповіді:


79

Перше, що ви хочете зробити - це запустити Vim із налаштуваннями за замовчуванням:

vim -u NONE -U NONE -N

У -u NONEзапобігає Vim від завантаження вашого vimrc, -U NONEзапобігає Vim від завантаження вашого gvimrc, і -Nкаже Vim використовувати не сумісний-режим (це не потрібно, але більшість користувачів Vim не використовуються режим «сумісний»). Зверніть увагу , що NONEце потрібно , щоб бути у всіх великих буквах.

У Windows ви можете додати ці прапори, створивши новий ярлик 1 .

  • Якщо проблема залишається, знаєте, це не щось у вашому vimrc.

  • Якщо проблема зникає, тепер це викликано чимось у вашому файлі vimrc.

Це не мій vimrc!

Ура! Іди і задай своє запитання. Не забудьте зазначити, що ви намагалися запустити Vim без файлу vimrc!

Так це мій vimrc, тепер що?

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

Перевірте плагіни

Наступне, що ви, мабуть, хочете зробити - це спочатку відключити всі плагіни; плагіни можуть трохи змінити Vim. Якщо це вирішує проблему, то спробуйте з’ясувати, який плагін, повторно ввімкнувши їх по одному. Після того, як ви дізналися, який саме плагін викликає проблему, ви можете спробувати його виправити, прочитавши документацію цього плагіна та / або задавши питання з тегом plugin-<name>.

Якщо це НЕ плагін, і ви не маєте ніякого уявлення , що це викликає проблему, то це процедура проб і помилок. Прокоментуйте один або кілька рядків у своєму vimrc, запустіть Vim, перевірте, чи не виникає проблема, і повторіть цю процедуру, поки проблема не перестане виникати. Найшвидший спосіб зробити це:

  1. Прокоментуйте (або видаліть) приблизно половину вашого файлу vimrc.
  2. Перезапустіть Vim або відкрийте новий Vim (перезавантажити vimrc недостатньо добре, оскільки налаштування не вимкнено).
  3. Чи проблема тепер пішла? Поставте назад частину, яку ви вилучили (тримати Vim відкритим, а тут скасувати використання скасування) та повторіть крок 1 на частині, яку ви додали назад.
  4. Проблема все-таки виникає? Перейдіть до першого кроку.

Зрештою, у вас повинен бути один варіант або комбінація декількох варіантів, що викликає ваші проблеми. Дізнатися більше про будь-який варіант у Vim можна за допомогою:

:help 'option_name'

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

Якщо ви все ще розгубилися після прочитання довідкової сторінки, ви знаєте, де задати питання ;-)

Налагодження одного плагіна

Якщо ви хочете ізолювати один плагін, можливо, щоб задати питання про нього, ви хочете завантажити якомога менше, але все-таки завантажити плагін; Ви можете легко зробити це за допомогою функції пакетів Vim. Для цього потрібен Vim 8 або досить нова версія Neovim.

  1. Створіть новий порожній каталог; ми будемо використовувати ~/pluginшлях у цьому прикладі. Тепер покладіть плагін у звичайний pack/plugins/start/$nameкаталог. Наприклад:

    git clone https://github.com/fatih/vim-go.git ~/plugin/pack/plugins/start/vim-go
    
  2. Створіть test-vimrcфайл із наступним вмістом; це забезпечить, що Vim буде завантажувати плагіни з ~/pluginкаталогу, а не з ~/.vim каталогу:

    set nocompatible
    set packpath=~/plugin,/usr/share/vim/vimfiles,/usr/share/vim/vim80,/usr/share/vim/vimfiles/after,~/plugin/after
    packloadall!
    
    syntax on
    filetype plugin indent on
    
  3. Почніть Vim з:

    vim -U NONE -u ~/test-vimrc
    

    Тепер у вас є мінімальний vimrc тільки з цим єдиним плагіном.


Виноски

1 Наприклад: на 64 - бітної Windows, ярлик буде виглядати приблизно так: "C:\Program Files (x86)\Vim\vim74\vim.exe" -u NONE -U NONE -N. Щоб створити його, клацніть правою кнопкою миші у Файловому провіднику, де ви хочете клацнути ярлик, а потім виберіть Створити -> Ярлик і вставте текст ярлика. Можливо, вам доведеться змінити шлях Vim, якщо ваш Vim встановлений в іншому місці.


7
Ця методика називається Binary Search Fault Localization .
tommcdo

2
Після того як ви з'ясуєте свою помилку, це був би чудовий час, щоб почати тримати ваш .vimrc під контролем версій :) Це майже завжди буде однією з останніх змін, які ви внесли до нього, які змусили речі вести себе дивно.
escrafford

1
Вам не потрібно, -U NONEякщо є -u NONE.
Антоній

@MartinTournoij Я запропонував редагування, щоб полегшити розуміння читачеві вперше. Я сподіваюся, вам сподобається. Дякую!
jpaugh

1
Спасибі @jpaugh; Я думаю, що наказ має більше сенсу.
Мартін Турноїй

31

Існує -Dпараметр Vim, спеціально для налагодження, який перейде в режим налагодження після виконання першої команди зі скрипту.

Наприклад, щоб запустити Vim в режимі налагодження без плагінів, запустіть як:

vim --noplugin -D

Введіть n/, nextщоб проаналізувати наступний рядок і продовжуйте натискати Enter.

І contабо qповернутися до vimінтерфейсу.

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

Натисніть Ctrl+ dдля переліку доступних команд

Детальніше:


1
Це було найбільш корисно у пошуку простої помилки у файлі .vimrc, який спричиняв повідомлення про помилку. Варто спробувати це спочатку, як це швидко зробити.
RichVel

1
@kenorb ця команда дивовижна, врятуй мене від переходу до іншого редактора.
TheLazyChap

11

Як уже згадувалося, спочатку спробуйте vim -u NONE -U NONE -Nпереконатися, що ваш вініл працює добре.

Потім запустіть vim звичайно і перевірте

:messages

зсередини vim після проблеми, яка покаже всі попередження та помилки.

Нарешті запустіть vim із наступною командою

vim -V9logfile.log

який створить лог - файл з ім'ям logfile.log, -V9є рівень протоколювання і спробуйте відтворити проблему.


11

Ще одна порада: як печеринець, як може здатися, мені подобається додавати: echom "message" до мого .vimrc, щоб побачити, що виконується, а що ні.

Наприклад

if executable('ag')
  :echom "AG FOUND"

  ...
endif

Це допомагає мені швидко зрозуміти, чи виконується блок if тощо. Повідомлення буде надруковано на консолі наступного разу, коли ви запустите vim.


6
І якщо ви використовуєте echomіншу цікаву команду - :messagesце отримати повний журнал повідомлень, що перегукуються. Іноді може бути корисно подивитися на них після запуску.
statox

Це майже те, що мені було потрібно, я хочу побачити, яке значення cpoptions знаходиться в моєму vimrc, як я можу відповідати результатом ": встановити cpoptions?" ?
Майк Ліпперт

10

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

" feature toggles in vimrc
let g:vimrc_feat_pathogen               = 1
let g:vimrc_feat_core_minimal           = 1
let g:vimrc_feat_matchit                = 1
let g:vimrc_feat_options                = 1
let g:vimrc_feat_colors_and_highlight   = 1
let g:vimrc_feat_key_rebinding_arpeggio = 1
let g:vimrc_feat_key_rebinding          = 1
let g:vimrc_feat_autocommand_group      = 1
let g:vimrc_feat_custom_definitions     = 1
let g:vimrc_feat_load_opam              = 1

Ось приклад розділу, який охороняє if:

if g:vimrc_feat_core_minimal
    set nocompatible
    filetype plugin indent on
    syntax on
endif

1

Мій час завантаження vimrc був дуже повільним, близько 400 мс, і я скоротив його до 20 мс, лише видаливши цю лінію:

silent !mkdir ~/.config/nvim/backups > /dev/null 2>&1

Переконайтесь, що у вас немає таких дзвінків до зовнішніх команд.


1
Ласкаво просимо на сайт! Це корисний примха, але він є дещо більш конкретним, ніж дуже загальне запитання. Це може бути краще додано як відповідь, наприклад, на це запитання , або, якщо ви просто хочете поділитися знаннями, ви можете, можливо, запитати і відповісти на власне запитання?
Багатий

0

Ось найпростіша процедура для початку роботи.

  1. коментуйте вміст усього .vimrc-файлу
  2. перезавантажте .vimrc, запустивши :source %або:so $MYVIMRC
  3. коментувати стриману частину файлу (як правило, починаючи зверху)
  4. Повторіть кроки 2 і 3, поки не знайдете помилку.
  5. виправити помилку.

1
Ця відповідь могла б бути набагато кращою, якщо ви правильно написали її з великої літери та прописали її.

Настійно рекомендую робити це за допомогою двійкового пошуку.
D. Ben Knoble
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.