Depuração matchit encaixe no vim (sob Cygwin)
-
10-07-2019 - |
Pergunta
O "matchit" plugin para vim é suposto para permitir que você use a tecla %
para saltar entre correspondentes de tags de início / fim, quando a edição de HTML, bem como /*
e comentar */
delimitadores ao editar outros tipos de código.
Eu segui as instruções exatas em ":help matchit
", mas %
ainda não funciona para mim.
Parece bobagem de perguntar "Por que não faz este trabalho?" então ao invés eu estou pedindo Como posso diagnosticar o problema? Ponteiros para referências são bem-vindos, mas técnicas específicas vim-depuração-plugin são os preferidos.
Aqui é o ~ / .vim diretório:
$ 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 .
Estou executando vim 7.2 sob Cygwin (Fall instalado 2008). mostra 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
No vim, shows :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
Notavelmente, a sintaxe e filetype são ambos reconhecidos como HTML. (A coloração de sintaxe é apenas multa.)
Se a informação adicional é necessária, por favor comentário.
UPDATE:
Por resposta por muito php :
Depois de tentar vim -V1
, eu tinha mudado meu .vimrc
para incluir uma linha
set nocp
então a opção compatible
não está ligado.
: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
)
Por resposta por michael :
: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
Note que matchit.vim, html.vim, tohtml.vim, css.vim e javascript.vim estão todos presentes.
:echo b:match_words
E121: Undefined variable: b:match_words
E15: Invalid expression: b:match_words
Hm, isso parece altamente relevante. Agora estou olhando através :help matchit-debug
para descobrir como corrigir b:match_words
.
Solução
Graças a desta postagem do vim_use lista de discussão, eu encontrei uma seqüência de comandos que funciona:
vim -u NONE somefile.html
(Isso inicia vim sem ler Vimrc)
Em seguida,
:set nocp
:source /usr/share/vim/vim72/macros/matchit.vim
:filetype plugin on
:filetype detect
:syntax on
Não é o ideal, mas não parece trabalho a partir .vimrc. E ele não funciona quando precede syntax on
a detecção filetype, então eu suspeito que há um conflito na interação entre a sintaxe destacando coisas e combinando coisas.
Outras dicas
Use o seguinte comando para ver se o plugin foi carregado:
:let loaded_matchit
Se você receber um erro variável indefinida, então o plugin não foi carregado - você deve se certificar de que '/cygdrive/y/.vim' está na sua opção 'runtimePath' (uso ':set runtimepath?
')
Além disso, note que o matchit plugin não carregar se a opção 'compatíveis' está ligado.
Você pode querer ler através :he matchit
. A seção sobre poder de configuração ajuda.
:he matchit-debug
- depuração de informações específicas para matchit
:he debug
- depuração geral vim (você pode fazer todos os tipos de ponto de interrupção / passo através de coisas)
A pegadinha comum (não o seu caso, porém) é o tipo de arquivo html pode ser cortado se você estiver usando um plugin modelo. (Ex. O meu html é transformado em html.djangotemplate) Tente :set ft?
para encontrar o seu tipo de arquivo. talvez seja necessário copiar b:match_words
no ftplugin para o filetype modelo.
:echo b:match_words
- deve dar uma lista de html procura de regex
Também no caso do :scriptnames
óbvio deve mostrar algum lugar matchit.vim
Good Luck
Eu não tenho nenhuma pista sobre vim (além de usá-lo muito), mas eu achei que colocar o followng duas linhas no meu .vimrc ajudou muito:
:source /usr/share/vim/addons/plugin/matchit.vim
:source /usr/share/vim/vim72/ftplugin/html.vim
Estou certo de que há uma maneira correta, mas pelo menos isso funcionou para mim.
Cheers,
Joerg
Eu tenho os comandos acima para o trabalho no meu .vimrc removendo na maioria das outras tretas em ~ / vim, como ~ / .vim / ftdetect e ~ / .vim / ftplugin. Comece com um pano limpo ~ / .vim única e copiar em específico do que para você, evitando qualquer coisa que possa tem uma versão mais recente em $ VIMRUNTIME, e ele deve funcionar.