2013-02-21 70 views
1

我想要做的是讓<tab>做一切。讓標籤做任何事情在vim

  1. 添加正常選項卡,如果空格出現
  2. 拉昇,並在彈出的菜單中下來,如果它顯示了
  3. 添加CodeComplete()函數存在

的返回結果我得到的結果從CodeComplete()函數到變量codecompl。所以問題在這裏:如何插入變量codecompl的蜇傷。請插入變量codecompl的字符串後,請不要致電返回,因爲我還有其他的東西。 代碼的帖子在這裏:

function! CleverTab() 
    if strpart(getline('.'), 0, col('.')-1) =~ '^\s*$' 
     return "\<Tab>" 
    endif 
    if pumvisible() 
     return "\<C-N>" 
    endif 
    let s:codecompl = CodeComplete() 
    <c-r>=s:codecompl<cr> 
    "exec " " .s:codecompl. "\<enter>"."." 
    "if g:swith_region_flag == 1 
    " return SwitchRegion() 
    "else return s:codecompl 
    return '' 
endfunction 

我嘗試過很多辦法,但問題仍然沒有解決。我現在想的是使用=在變量codecompl中插入字符串。然後做其他事情。

回答

1

你的意思是,你不能只是

:return s:codecompl 

,因爲你需要其他代碼執行,但的s:codecompl內容插入後是做了什麼?

該序列不可能在單個函數中實現;爲您回覆

:return s:codecompl . "\<C-O>:call SecondPart()\<CR>" 

或可替代

:return s:codecompl . "\<C-R>=SecondPart()\<CR>" 
+0

聽起來不錯,我會試一試。另外,如何「 =」?有可能使用它來插入字符串?爲什麼它「 = s:codecompl 」不起作用?並彈出信息「E488:Trailing characters」? – kevin 2013-02-21 12:10:14

+0

您不能返回腳本本地的:...變量,因爲它不能在腳本上下文之外進行評估! – 2013-02-21 12:16:04

+0

是有意義的。現在,我有最後一個問題,這就是爲什麼我在Ex模式下不插入模式,因爲當我在文檔中輸入時,我確實處於插入模式? – kevin 2013-02-21 12:39:38

2

如果您不堅持編寫自己的功能,請查看supertab。它配備了所有這些功能...

+0

感謝:額外的代碼移動到不同的功能,並追加其調用到插入的代碼。實際上,我有Youcompleteme,code_complete和snipmate插件。我希望他們都能夠優雅地工作。 – kevin 2013-02-21 12:15:31