2012-02-22 62 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