vim用ctrl-n调用什么函数来完成

时间:2012-02-22 19:40:15

标签: vim

当我使用ctrl-n完成时,我的vim会在50%的时间内抛出令人讨厌的错误

  

E854:路径太长,无法完成

我真的想重新映射它,并使用:silent选项调用它来抑制错误,但我不知道哪个函数提供了完成,所以我无法重新映射它。

所以我的问题是在哪里可以找到C-N在插入模式下调用的确切内容

解决方案:

正如在我接受的答案的评论中所提到的,我找到了解决这个问题的方法。根据有关建立自己的vim的说明:brilliantcorners.org/2011/02/building-vim-on-osx-snow-leopard

我为E854找到了源目录,它只出现在1个文件中。如果您打开该文件,您会看到它只被引用两次。我刚删除了那些错误调用并构建了vim

这并不能解决实际问题,但它与忽略效果相同。它现在运行良好,并没有抛出任何错误,我希望有这个问题的其他人得到帮助。

3 个答案:

答案 0 :(得分:2)

insert 模式下,<C-n>通常会使用缓冲区的内容完成单词。我不知道它在内部是如何工作的,但它可能会抱怨缓冲区的相关文件的路径长度。

但我无法在Vim的E854中找到:help的引用,如果它来自我没有的插件,则可能是正常的。

你可以:

  • 尝试:verbose imap <c-n>找到其来源或
  • 搜索标记E854:help E854
  • 的帮助
  • 搜索有关sting E854:helpgrep E854
  • 的帮助
  • E854文件夹~/.vim $ grep -r E854 ~/.vim中的{grep}。

答案 1 :(得分:2)

我有类似这样的问题。事实证明它正在爆炸,因为与Vim一起分发的当前ruby.vim调用了一个弃用的Gem.all_load_paths,这会在你的路径变量中产​​生一个令人讨厌的错误。查看https://github.com/rubygems/rubygems/issues/161https://groups.google.com/forum/#!msg/vim_dev/wrouKpIDraU/xLxUuMT3_6QJ以获得修复:)

答案 2 :(得分:1)

我的vim源代码副本(在某些时候使用Mercurial和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 - &gt; a),所以你最终做了路径完成并得到/ foo / bar / a / b / c / a / b / c / a / b / c / a / b / c / .....并且限制受到限制。

修改

抓住最后的理论;基于实际阅读代码,它看起来像是在试图找到一个标签文件并炸毁。你可以发表:set tags时得到的结果吗?

修改2

叹息,已经很晚了......以下是我刚才找到的答案::help completefunc:help completion-functionscompletefunc是你想要的,如果我(最终)理解你的问题。