2013-03-26 98 views
1

我有一個瘋狂的小挑戰。我想重新映射製表符並將+ tab移到vim中的基本製表符完成。下面是我起步的地方:在vim中重新映射製表符完成

set completeopt= 
inoremap <tab> <C-n> 
inoremap <S-tab> <C-p> 

這沒有任何影響的,同時我也意識到這可能會搞亂了我的片段插件。我去google搜索,發現這個:http://vim.wikia.com/wiki/Smart_mapping_for_tab_completion,但沒有實施任何建議的運氣。

我想映射到選項卡並移動+選項卡,而不會丟失片段功能。任何幫助將搖滾!

更新:我也嘗試過,現在運氣好。它沒有可感知的效果。

fu! InsertTabWrapper(direction) 
    let char_before = col('.') - 1 
    if !char_before || getline('.')[char_before - 1] !~ '\k' 
    return "\<tab>" 
    elseif "backward" == a:direction 
    return "\<c-p>" 
    else 
    return "\<c-n>" 
    endif 
endfu 
inoremap <tab> <c-r>=InsertTabWrapper("forward")<cr> 
inoremap <s-tab> <c-r>=InsertTabWrapper("backward")<cr> 
+0

說在一個php/java/c文件中,你有「雖然它被稱爲」在評論中,然後你鍵入'wh ',你想要什麼? 'while'?或'while循環片段'? – Kent 2013-03-26 17:17:17

+0

while循環片段。這對我來說不是很常見,但我希望片段優先。 – Costa 2013-03-26 17:29:32

回答

1

我同意你說的映射<tab>是Vim頭疼的事情。

我個人有SUPERTABNeocompletecacheSnipmatepydiction ....真的花了一些時間,讓他們一起工作,與<tab> ......即使沒有(也許)完美的,這足夠我的日常使用。

回到你的問題,你可以考慮安裝一個插件叫做superTabhttps://github.com/ervandew/supertab),並且在.vimrc加上這些行:

let g:SuperTabDefaultCompletionType = 'context' 
let g:SuperTabContextTextOmniPrecedence = ['&omnifunc','&completefunc'] 
let g:SuperTabRetainCompletionType=2 

inoremap <expr><Enter> pumvisible() ? "\<C-Y>" : "\<Enter>" 
inoremap <expr><TAB> pumvisible() ? "\<C-n>" : "\<TAB>" 

然後....好運氣......我希望它的工作原理爲您的要求。

+0

謝謝,肯特!我看了SuperTab。這對我來說是一大堆開銷,我沒有用它做的一切。不過謝謝! – Costa 2013-03-26 17:58:10

+1

@Costa我建議先安裝它,並將這些行復制到vimrc中,然後進行測試,最好對多個文件類型進行測試。如果它按照預期工作。瀏覽幫助文件,看看它爲什麼起作用,它可以做什麼......說實話,我剛剛評論了我的neocomp和pydict插件,並對supertab設置做了一些小改動。它似乎**工作,我只是在vim ft和java ft中測試過,我覺得你的問題可以在不安裝superTab的情況下解決。但我沒有試一試。祝你好運! – Kent 2013-03-26 18:04:02

+0

謝謝,肯特,我來看看。 – Costa 2013-03-26 18:16:44