Как мне отладить мой файл 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. Проблема все еще возникает? Переходите к шагу 1.

В конце концов у вас должна быть одна опция или комбинация нескольких опций, которая вызывает вашу проблему. Вы можете узнать больше о любой опции в 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. Чтобы создать его, щелкните правой кнопкой мыши в проводнике, где вы хотите ярлык, затем выберите New -> Shortcut и вставьте текст ярлыка. Возможно, вам придется изменить путь Vim, если ваш Vim установлен в другом месте.

Мартин Турной
источник
7
Этот метод называется локализацией ошибок двоичного поиска .
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команду в свой vimrc, чтобы начать отладку сразу после этой команды.

Нажмите Ctrl+ dдля получения списка доступных команд

Читать далее:

kenorb
источник
1
Это было наиболее полезно при поиске простой ошибки в файле .vimrc, которая вызывала сообщение об ошибке. Стоит попробовать сначала, так как это быстро.
RichVel
1
@kenorb эта команда офигенно, спаси меня от перехода в другой редактор.
TheLazyChap
11

Как уже упоминалось, сначала vim -u NONE -U NONE -Nубедитесь, что ваш vanilla vim работает нормально.

Затем запустите Vim нормально и проверьте

:messages

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

Наконец, запустите vim с помощью следующей команды

vim -V9logfile.log

который создаст файл журнала с именем logfile.log, -V9это уровень ведения журнала и попытается воспроизвести вашу проблему.

RSabet
источник
11

Еще один совет: как бы ни казался пещерный человек, мне нравится добавлять: echom «message» в мой .vimrc, чтобы увидеть, что выполняется, а что нет.

Например

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

  ...
endif

Это помогает мне быстро увидеть, выполняется ли блок if и т. Д. Сообщение будет напечатано на консоли при следующем запуске vim.

Эди борн
источник
6
И если вы используете echomдругую интересную команду, :messagesчтобы получить полный журнал сообщений, отраженных. Иногда полезно посмотреть на них после запуска.
statox
Это почти то, что мне было нужно, я хочу посмотреть, какое значение cpoptions находится в точке моего vimrc, как мне отобразить вывод ": set 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

Убедитесь, что у вас нет вызовов на внешние команды, подобные этим.

Kristijan
источник
1
Добро пожаловать на сайт! Это полезная новость, но она более конкретна, чем заданный очень общий вопрос. Это может быть лучше добавить в качестве ответа, например, на этот вопрос , или, если вы просто хотите поделиться знаниями, возможно, вы могли бы задать свой вопрос и ответить на него?
Богатое
0

Вот очень простая процедура, с которой можно начать.

  1. закомментируйте содержимое всего вашего файла .vimrc
  2. перезагрузите ваш .vimrc, запустив :source %или:so $MYVIMRC
  3. раскомментируйте скрытую часть файла (обычно начинающуюся сверху)
  4. Повторите шаги 2 и 3, пока не найдете ошибку.
  5. исправить ошибку.
Майк Уилдинг
источник
1
Этот ответ мог бы быть намного лучше, если бы вы правильно его написали и сделали пунктуацию.
Настоятельно рекомендуем сделать это с помощью бинарного поиска.
Д. Бен Кнобл