2

vim 的“matchit”插件应该允许您%在编辑 HTML 时使用键在匹配的开始/结束标记之间跳转,以及在编辑其他类型的代码/**/使用注释分隔符。

我已按照“ :help matchit”中的确切说明进行操作,但%仍然对我不起作用。

问“为什么这不起作用?”似乎很愚蠢。所以我问我如何诊断问题?欢迎使用指向引用的指针,但首选特定的 vim-plugin-debugging 技术。

这是 ~/.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 .

我在 Cygwin 下运行 vim 7.2(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

在 vim 中,: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

4

5 回答 5

2

感谢vim_use邮件列表中的这个帖子,我发现了一系列有效的命令:

vim -u NONE somefile.html

(这会在不读取 .vimrc 的情况下启动 vim)

然后,

:set nocp
:source /usr/share/vim/vim72/macros/matchit.vim
:filetype plugin on
:filetype detect
:syntax on

这并不理想,但它似乎不适用于 .vimrc。而且在文件类型检测之前它不起作用syntax on,所以我怀疑语法突出显示的东西和匹配的东西之间的交互存在冲突。

于 2010-02-12T23:33:21.243 回答
1

您可能需要通读: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

祝你好运

于 2009-09-18T01:57:43.380 回答
1

使用以下命令查看插件是否已加载:

:let loaded_matchit

如果你得到一个未定义的变量错误,那么插件没有被加载——你应该确保'/cygdrive/y/.vim'在你的'runtimepath'选项中(使用' :set runtimepath?')

另请注意,如果打开了“兼容”选项,则不会加载 matchit 插件。

于 2009-09-17T23:29:12.473 回答
1

我对vim一无所知(除了经常使用它),但我发现在我的.vimrc中放入以下两行有很大帮助:

:source /usr/share/vim/addons/plugin/matchit.vim
:source /usr/share/vim/vim72/ftplugin/html.vim

我确信有一个正确的方法,但至少这对我有用。

干杯,

约尔格

于 2010-02-11T22:54:04.120 回答
0

通过删除 ~/vim 中的大部分其他垃圾,例如 ~/.vim/ftdetect 和 ~/.vim/ftplugin,我得到了上面的命令在我的 .vimrc 中工作。从一个干净的 ~/.vim 开始,只复制特定于你的内容,避免任何可能在 $VIMRUNTIME 中有更新版本的东西,它应该可以工作。

于 2010-03-28T00:05:44.397 回答