Отладка плагина matchit в vim (под Cygwin)
-
10-07-2019 - |
Вопрос
Предполагается, что плагин matchit для vim позволит вам использовать %
клавиша для перехода между соответствующими начальными и конечными тегами при редактировании HTML, а также /*
и */
разделители комментариев при редактировании других видов кода.
Я следовал точным инструкциям в ":help matchit
", но %
у меня все еще не работает.
Кажется глупым спросить: «Почему это не работает?» Так что вместо этого я спрашиваю Как я могу диагностировать проблему? Указатели на ссылки приветствуются, но предпочтительны конкретные методы отладки плагинов vim.
Вот каталог ~/.vim:
$ ls -ltaGR ~/.vim
/cygdrive/y/.vim:
total 0
drwxr-xr-x 1 spause 0 Sep 17 13:20 ..
drwxr-xr-x 1 spause 0 Sep 16 13:59 doc
drwxr-xr-x 1 spause 0 Sep 16 13:58 .
drwxr-xr-x 1 spause 0 Sep 16 13:58 plugin
/cygdrive/y/.vim/doc:
total 24
-rw-r--r-- 1 spause 1961 Sep 16 13:59 tags
drwxr-xr-x 1 spause 0 Sep 16 13:59 .
-rw-r--r-- 1 spause 19303 Sep 16 13:58 matchit.txt
drwxr-xr-x 1 spause 0 Sep 16 13:58 ..
/cygdrive/y/.vim/plugin:
total 32
drwxr-xr-x 1 spause 0 Sep 16 13:58 ..
-rw-r--r-- 1 spause 30714 Sep 16 13:58 matchit.vim
drwxr-xr-x 1 spause 0 Sep 16 13:58 .
Я использую vim 7.2 под Cygwin (установлен осенью 2008 г.). cygcheck
показывает:
1829k 2008/06/12 C:\cygwin\bin\cygwin1.dll
Cygwin DLL version info:
DLL version: 1.5.25
DLL epoch: 19
DLL bad signal mask: 19005
DLL old termios: 5
DLL malloc env: 28
API major: 0
API minor: 156
Shared data: 4
DLL identifier: cygwin1
Mount registry: 2
Cygnus registry name: Cygnus Solutions
Cygwin registry name: Cygwin
Program options name: Program Options
Cygwin mount registry name: mounts v2
Cygdrive flags: cygdrive flags
Cygdrive prefix: cygdrive prefix
Cygdrive default prefix:
Build date: Thu Jun 12 19:34:46 CEST 2008
CVS tag: cr-0x5f1
Shared id: cygwin1S4
В ВИМе :set
показывает:
--- Options ---
autoindent fileformat=dos shiftwidth=3
background=dark filetype=html syntax=html
cedit=^F scroll=24 tabstop=3
expandtab shelltemp textmode
viminfo='20,<50,s10,h
Примечательно, что синтаксис и тип файла распознаются как HTML.(Раскраска синтаксиса в порядке.)
Если необходима дополнительная информация, пожалуйста, прокомментируйте.
ОБНОВЛЯТЬ:
За ответ от слишком много PHP:
После попытки vim -V1
, я изменил свой .vimrc
включить строку
set nocp
Итак compatible
опция не включена.
:let loadad_matchit
loaded_matchit #1
:set runtimepath?
runtimepath=~/.vim,/usr/share/vim/vimfiles,/usr/share/vim/vim72,/usr/share/vim/vimfiles/after,~/.vim/after
(~
является /cygdrive/y
)
За ответ от Майкл:
:scriptnames
1: /cygdrive/y/.vimrc
2: /usr/share/vim/vim72/syntax/syntax.vim
3: /usr/share/vim/vim72/syntax/synload.vim
4: /usr/share/vim/vim72/syntax/syncolor.vim
5: /usr/share/vim/vim72/filetype.vim
6: /usr/share/vim/vim72/colors/evening.vim
7: /cygdrive/y/.vim/plugin/matchit.vim
8: /cygdrive/y/.vim/plugin/python_match.vim
9: /usr/share/vim/vim72/plugin/getscriptPlugin.vim
10: /usr/share/vim/vim72/plugin/gzip.vim
11: /usr/share/vim/vim72/plugin/matchparen.vim
12: /usr/share/vim/vim72/plugin/netrwPlugin.vim
13: /usr/share/vim/vim72/plugin/rrhelper.vim
14: /usr/share/vim/vim72/plugin/spellfile.vim
15: /usr/share/vim/vim72/plugin/tarPlugin.vim
16: /usr/share/vim/vim72/plugin/tohtml.vim
17: /usr/share/vim/vim72/plugin/vimballPlugin.vim
18: /usr/share/vim/vim72/plugin/zipPlugin.vim
19: /usr/share/vim/vim72/syntax/html.vim
20: /usr/share/vim/vim72/syntax/javascript.vim
21: /usr/share/vim/vim72/syntax/vb.vim
22: /usr/share/vim/vim72/syntax/css.vim
Обратите внимание, что присутствуют matchit.vim, html.vim, tohtml.vim, css.vim и javascript.vim.
:echo b:match_words
E121: Undefined variable: b:match_words
E15: Invalid expression: b:match_words
Хм, это выглядит очень актуально.сейчас просматриваю :help matchit-debug
чтобы узнать, как исправить b:match_words
.
Решение
Благодаря эта публикация из vim_use в списке рассылки я нашел последовательность команд, которая работает:
vim -u NONE somefile.html
(при этом vim запускается без чтения .vimrc)
Затем,
:set nocp
:source /usr/share/vim/vim72/macros/matchit.vim
:filetype plugin on
:filetype detect
:syntax on
Это не идеально, но, похоже, он не работает с .vimrc.И это не работает, когда syntax on
предшествует обнаружению типа файла, поэтому я подозреваю, что существует конфликт во взаимодействии между выделением синтаксиса и сопоставлением.
Другие советы
Используйте следующую команду, чтобы проверить, загружен ли плагин:
:let loaded_matchit
Если вы получаете ошибку неопределенной переменной, это означает, что плагин не был загружен — вам следует убедиться, что «/cygdrive/y/.vim» находится в вашем параметре «runtimepath» (используйте «:set runtimepath?
')
Также обратите внимание, что плагин matchit не загружается, если включена опция «совместимость».
Возможно, вы захотите прочитать :he matchit
.Раздел о настройке может помочь.
:he matchit-debug
- отладочная информация, специфичная для matchit
:he debug
- общая отладка vim (вы можете делать любые точки останова/пошаговые действия)
Распространенная ошибка (хотя это не ваш случай) заключается в том, что тип файла html может быть взломан, если вы используете плагин шаблона.(Например.мой html превратился в html.djangotemplate) Попробуйте :set ft?
чтобы найти свой тип файла.возможно, вам придется скопировать b:match_words
в ftplugin для типа файла шаблона.
:echo b:match_words
- должен предоставить список регулярных выражений, выглядящих в формате html
также в случае очевидного :scriptnames
должен где-то показывать matchit.vim
Удачи
Я понятия не имею о vim (кроме того, что часто им пользуюсь), но обнаружил, что добавление следующих двух строк в мой .vimrc очень помогло:
:source /usr/share/vim/addons/plugin/matchit.vim
:source /usr/share/vim/vim72/ftplugin/html.vim
Я уверен, что есть правильный способ, но, по крайней мере, у меня это сработало.
Ваше здоровье,
Йорг
Я получил команды выше, чтобы работать в моем .vimrc, удалив большую часть другого дерьма в ~/vim, таких как ~/.vim/ftdetect и ~/.vim/ftplugin.Начните с чистого ~/.vim и копируйте только в том, что для вас конкретно, избегая всего, что может иметь более новую версию в $ Vimruntime, и это должно работать.