【问题标题】:vim keyword complete when omni complete returns nothing?当omni complete什么都不返回时,vim关键字完成?
【发布时间】:2010-01-27 01:18:28
【问题描述】:

我正在尝试使用全向补全,如果它没有返回任何内容,我想使用普通关键字补全?

我认为 %omnifunc != '' 应该这样做...
但我错过了什么? 这是我的功能。

function! CleverTab()
  if pumvisible()
    return "\<C-N>"
  endif
  if strpart( getline('.'), 0, col('.')-1 ) =~ '^\s*$'
    return "\<Tab>"
  elseif &omnifunc != ''
    return "\<C-X>\<C-O>"
  else
    return "\<C-N>"
  endif
endfunction
inoremap <Tab> <C-R>=CleverTab()<CR>

【问题讨论】:

    标签: vim autocomplete


    【解决方案1】:
    let g:stop_autocomplete=0
    
    function! CleverTab(type)
        if a:type=='omni'
            if strpart( getline('.'), 0, col('.')-1 ) =~ '^\s*$'
                let g:stop_autocomplete=1
                return "\<TAB>"
            elseif !pumvisible() && !&omnifunc
                return "\<C-X>\<C-O>\<C-P>"
            endif
        elseif a:type=='keyword' && !pumvisible() && !g:stop_autocomplete
            return "\<C-X>\<C-N>\<C-P>"
        elseif a:type=='next'
            if g:stop_autocomplete
                let g:stop_autocomplete=0
            else
                return "\<C-N>"
            endif
        endif
        return ''
    endfunction
    
    inoremap <silent><TAB> <C-R>=CleverTab('omni')<CR><C-R>=CleverTab('keyword')<CR><C-R>=CleverTab('next')<CR>
    

    【讨论】:

    • 哦该死,我忘记了;)无论如何,你应该仔细检查每个菜单的 pumvisible
    • hmm... 没有让它工作,如果我在空格后按标签,我得到一个标签,然后我立即得到一个新的自动完成菜单。我尝试将此作为第一个 if 语句: if strpart( getline('.'), 0, col('.')-1 ) =~ '^\s*$' return "\"
    • 我认为有一个小错误——我不知道 vim 脚本,但我认为你需要 在你当前有 之后的情况下我在一个非 omnifunc 文件中点击了 Tab 并想做关键字补全。
    猜你喜欢
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-08
    • 2021-04-02
    相关资源
    最近更新 更多