2012-02-22 28 views
3

我VIM拋出嚴重的錯誤,當我使用CTRL-N完成什麼功能呢VIM調用完成用Ctrl-N

E854 50%的時間:路徑太長完成

我真的想重新映射這個,並用:silent選項來調用它來抑制錯誤,但我不知道什麼函數提供了完成,所以我不能重新映射它。

所以我的問題是我在哪裏可以找到,當它在插入模式調用CN調用正是

解決方案:

正如在評論中提到我接受的答案,我發現了一個辦法解決這。基於在這裏建立自己的vim的指示:brilliantcorners.org/2011/02/building-vim-on-osx-snow-leopard

我grepped E854的源目錄,它只出現在1文件。如果你打開該文件,你會發現它只被引用兩次。我只是刪除了這些錯誤調用,並建立vim

這並不解決實際問題是什麼,但它與做忽略的效果相同。它現在很好用,並且不會出現任何錯誤,我希望任何有這個問題的人都可以幫助解決這個問題。

回答

1

我的vim的源代碼(在使用水銀和hg clone https://vim.googlecode.com/hg/一些點獲得)的複印件發現錯誤被扔只在一個地方,在內部功能vim_findfile_init()

static char_u e_pathtoolong[] = N_("E854: path too long for completion"); 

... 


/* 
* copy wc_path and add restricts to the '**' wildcard. 
* The octet after a '**' is used as a (binary) counter. 
* So '**3' is transposed to '**^C' ('^C' is ASCII value 3) 
* or '**76' is transposed to '**N'('N' is ASCII value 76). 
* For EBCDIC you get different character values. 
* If no restrict is given after '**' the default is used. 
* Due to this technique the path looks awful if you print it as a 
* string. 
*/ 
len = 0; 
while (*wc_part != NUL) 
{ 
    if (len + 5 >= MAXPATHL) 
    { 
     EMSG(_(e_pathtoolong)); 
     break; 
    } 

... 

所以它看起來像它正在進行任意深度的通配符擴展。如果我必須採取瘋狂的刺法,我會說你在文件系統中有一個路徑,它有一個循環的符號鏈接(例如c - > a),所以你最終完成路徑並獲得/ foo/bar/a/b/c/a/b/c/a/b/c/a/b/c/.....並且限制受到打擊。

編輯

劃痕,去年理論;基於實際閱讀代碼,它看起來像試圖找到一個標籤文件並炸燬。你可以發佈你得到什麼,當你做:set tags

編輯2

感嘆,它的晚......這裏就是你原本想,我只是找到了答案:做:help completefunc:help completion-functions。如果我(終於)理解你的問題,你需要的是completefunc

+0

這使我找到了一個解決方案。我不知道任何C代碼,但只有兩個地方拋出錯誤E854,刪除它們並重新編譯它的作品。我仍然不知道是什麼原因導致了這個錯誤,但至少我以這種方式實現了同樣的沉默。 我跟着這個博客http://brilliantcorners.org/2011/02/building-vim-on-osx-snow-leopard/從源代碼構建vim – npiv 2012-02-23 17:13:43

2

插入模式,<C-n>通常用您的緩衝區內容完成單詞。我不知道它在內部是如何工作的,但它可能會抱怨緩衝區關聯文件的路徑長度。

但我無法在Vim的:help中找到對E854的引用,如果它來自我沒有的插件,這可能是正常的。

,你可以:

  • 嘗試:verbose imap <c-n>定位其來源或
  • 搜索幫助標籤E854:help E854
  • 搜索幫助刺痛E854:helpgrep E854
  • 的grep請在~/.vim文件夾中輸入E854$ grep -r E854 ~/.vim
+0

它不是來自插件,你可能有一個老vim。 http://markmail.org/message/w6yj35zjsnlslyic – npiv 2012-02-23 16:24:41

+0

是的,2010年的7.3,這已經很老了。但提問者沒有說明他正在使用哪個版本,所以... – romainl 2012-02-23 16:34:58