【问题标题】:Pressing tab in HTML files in vim goes to the next empty tag pair rather than expanding a completion在 vim 中的 HTML 文件中按制表符转到下一个空标记对而不是扩展完成
【发布时间】:2026-01-06 08:50:01
【问题描述】:

我不确定在 HTML 文件中跳转到下一个空标签对的功能来自哪里。我想完全禁用它。

问题仅出现在同时使用 SuperTab 和 SnipMate 时,如果我删除 SuperTab 选项卡会返回正常展开,如果我删除 SnipMate,则选项卡会返回显示完成。

在过去,我的工作都很好,并且想再次这样做。

我正在使用:

http://github.com/msanders/snipmate.vim
http://github.com/scrooloose/snipmate-snippets
http://github.com/ervandew/supertab

使用 vim-update-bundles。两者的默认配置。我启用的其他选项是语法。自动缩进。智能缩进。展开选项卡。不兼容。文件类型缩进插件。

【问题讨论】:

  • 我以前也有同样的问题,只不过是因为 SuperTab 和 Sparkup。
  • 同样的问题 += 降价文件。

标签: vim snipmate


【解决方案1】:

SnipMate 和 SuperTab 都使用 ,这使得它们的组合非常烦人和不可预测。

经过多年的 TextMate, 扩展是我不能/不想放弃的习惯,所以我很快放弃了 SuperTab,并学会了爱上 Vim 的原生 Omni Completion:

inoremap <leader>, <C-x><C-o>
inoremap <leader>: <C-x><C-f>
inoremap <leader>= <C-x><C-l>

要获得更流畅的体验,autocomplpop 速度惊人且智能。

【讨论】:

    【解决方案2】:

    适合我需要的解决方案是neocomplcache

    这是 autocomplpop、supertab 和 snipmate 的完美结合。嗯,sn-p 部分只是有点小错误,但非常有用。

    但是我不使用 来扩展,弹出的omnicompletion 在第三个字符之后出现。您使用 移动列表,并使用 CtrlK 扩展 sn-ps(a la textmate),但您可以映射它给你选择。

    这些是我的.vimrc 设置。

            """"""""""""""""""""""""""""""
            " => neocomplcache plugin
            """"""""""""""""""""""""""""""
            " TODO: Still need to tweak behavior with <TAB> to expand
            "       snippets, change throughout the autocompletion list
    
            " Use neocomplcache.
            let g:neocomplcache_enable_at_startup = 1
            " Use smartcase.
            let g:neocomplcache_enable_smart_case = 1
            " Use camel case completion.
            let g:neocomplcache_enable_camel_case_completion = 1
            " Use underbar completion.
            let g:neocomplcache_enable_underbar_completion = 1
            " Set minimum syntax keyword length.
            let g:neocomplcache_min_syntax_length = 3
            let g:neocomplcache_lock_buffer_name_pattern = '\*ku\*'
            let g:neocomplcache_snippets_dir = '~/.vim/snippet/'
            " Define dictionary.
            let g:neocomplcache_dictionary_filetype_lists = {
                        \ 'default' : '',
                        \ 'vimshell' : $HOME.'/.vimshell_hist',
                        \ 'scheme' : $HOME.'/.gosh_completions'
                        \ }
    
            " Define keyword.
            if !exists('g:neocomplcache_keyword_patterns')
                let g:neocomplcache_keyword_patterns = {}
            endif
            let g:neocomplcache_keyword_patterns['default'] = '\h\w*'
    
            " Plugin key-mappings.
            imap <C-k>     <Plug>(neocomplcache_snippets_expand)
            smap <C-k>     <Plug>(neocomplcache_snippets_expand)
            inoremap <expr><C-g>     neocomplcache#undo_completion()
            inoremap <expr><C-l>     neocomplcache#complete_common_string()
    
            " SuperTab like snippets behavior.
            imap <expr><TAB> neocomplcache#sources#snippets_complete#expandable() ? "\<Plug>(neocomplcache_snippets_expand)" : pumvisible() ? "\<C-n>" : "\<TAB>"
    
            " Recommended key-mappings.
            " <CR>: close popup and save indent.
            " inoremap <expr><CR>  neocomplcache#smart_close_popup() . "\<CR>"
            " <TAB>: completion.
            inoremap <expr><TAB>  pumvisible() ? "\<C-n>" : "\<TAB>"
            " <C-h>, <BS>: close popup and delete backword char.
            inoremap <expr><C-h> neocomplcache#smart_close_popup()."\<C-h>"
            inoremap <expr><BS> neocomplcache#smart_close_popup()."\<C-h>"
            inoremap <expr><C-y>  neocomplcache#close_popup()
            inoremap <expr><C-e>  neocomplcache#cancel_popup()
    
            " AutoComplPop like behavior.
            "let g:neocomplcache_enable_auto_select = 1
    
            " Shell like behavior(not recommended).
            "set completeopt+=longest
            "let g:neocomplcache_enable_auto_select = 1
            "let g:neocomplcache_disable_auto_complete = 1
            "inoremap <expr><TAB>  pumvisible() ? "\<Down>" : "\<TAB>"
            "inoremap <expr><CR>  neocomplcache#smart_close_popup() . "\<CR>"
    
            " Enable omni completion.
            autocmd FileType css setlocal omnifunc=csscomplete#CompleteCSS
            autocmd FileType html,markdown setlocal omnifunc=htmlcomplete#CompleteTags
            autocmd FileType javascript setlocal omnifunc=javascriptcomplete#CompleteJS
            autocmd FileType python setlocal omnifunc=pythoncomplete#Complete
            autocmd FileType xml setlocal omnifunc=xmlcomplete#CompleteTags
    
            " Enable heavy omni completion.
            if !exists('g:neocomplcache_omni_patterns')
                let g:neocomplcache_omni_patterns = {}
            endif
            let g:neocomplcache_omni_patterns.ruby = '[^. *\t]\.\w*\|\h\w*::'
            "autocmd FileType ruby setlocal omnifunc=rubycomplete#Complete
            let g:neocomplcache_omni_patterns.php = '[^. \t]->\h\w*\|\h\w*::'
    
            au BufNewFile,BufRead *.snip set syntax=snippet ft=snippet foldmethod=indent
    

    【讨论】:

      最近更新 更多