2011-11-07 42 views
1

我希望能夠像Textmate一樣在Vim中使用Tab完成。像Textmate中的Tab完成?

像這樣。

  • 正在運行<Tab>應該在當前文檔中的單詞之間切換,從最接近的單詞開始。
  • 建議應內聯顯示,而不是列表中。

如果它在當前文件中出現單詞時可能通過詞典中的單詞循環,那將是非常好的。

我目前使用supertab,是否可以調整它以滿足我的需求?

以下是我的vimrc文件中的相關代碼。

function! Tab_Or_Complete() 
    if col('.')>1 && strpart(getline('.'), col('.')-2, 3) =~ '^\w' 
    return "\<C-N>" 
    else 
    return "\<Tab>" 
    endif 
endfunction 
inoremap <Tab> <C-R>=Tab_Or_Complete()<CR> 
set dictionary="/usr/share/dict/words" 

回答

4

讓我們說清楚。

在TextMate中打<tab>根本不提供單詞完成,它會觸發片段的擴展。

通過點擊<Esc>來觸發使用當前文件內容的字完成。

半智能代碼完成可以由當前活動的軟件包提供,通常使用<Alt><Esc>

這是完成三種不同的快捷方式和三種非常不同的UI和行爲的完成類型。

現在在Vim的身邊...

一些插件(SnipMate,SnippetEmu ...)旨在提供TextMate的<Tab>擴展系統的等效。

字完成,則通過提供內置的名爲「插入模式完成」(:help ins-completion)功能,並通過敲擊<C-n><C-p><C-x><C-k>從字典來完成觸發。

代碼完成是由一個稱爲「omni completion」(:help new-omni-completion)的內置功能提供的,並通過觸擊<C-x><C-o>觸發。

我不認爲你想模仿TextMate的<Tab>擴展或執行代碼完成。

這使得我們的

  • <C-n><C-p>混合用言語來完成從當前緩衝區
  • <C-x><C-k>從你的字典
+0

完成是否有可能隱藏自動完成列表當使用''? – Oleander

+1

「set completeopt- = menu」 –

+0

@Randy Morris謝謝,這工作! – Oleander