2012-02-22 1 views
3

Мой ВИМ бросает неприятную ошибке 50% времени, когда я использую Ctrl-N для завершения, что функция делает ВИМ вызов для завершения с Ctrl-N

E854: путь слишком долго для завершения

Я действительно хочу переназначить это и называть его с помощью опции: silent, чтобы подавить ошибку, но я понятия не имею, какая функция обеспечивает завершение, поэтому я не могу переназначить ее.

Так что мой вопрос, где я могу найти именно то, что CN вызовов, когда он вызывается в режиме вставки

Решение:

Как уже говорилось в комментарии на мой принятый ответ, который я нашел способ обойти это , Основываясь на инструкциях по созданию собственного vim здесь: brilliantcorners.org/2011/02/building-vim-on-osx-snow-leopard

Я скопировал исходный каталог для E854, и он появился только в 1 файле. Если вы откроете этот файл, вы увидите, что он ссылается только дважды. Я просто удалил эти ошибки и построил vim

Это не решает проблемы, но это тот же эффект, что и игнорировать. Он отлично работает сейчас и не вызывает никаких ошибок, надеюсь, кому-нибудь еще с этой проблемой поможет это.

ответ

1

Моя копия исходного ВИМ кода (полученного в некоторой точке, используя 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 -> a), поэтому вы завершаете завершение пути и получаете/foo/bar/a/b/c/a/b/c/a/b/c/a/b/c/..... и предел попадает.

Редактировать

Царапины, что последняя теория; основанный на фактическом чтении кода, похоже, что он пытается найти файл тега и взорвать. Можете ли вы опубликовать то, что получаете, когда делаете :set tags?

Edit 2

Вздох, уже поздно ... Вот ответ, который вы изначально хотели, чтобы я только что нашел: делать :help completefunc и :help completion-functions. completefunc - это тот, который вы хотите, если я (наконец) пойму ваш вопрос.

+0

Это привело меня к решению. Я не знаю никакого c-кода, но есть только 2 места, которые вызывают ошибку E854, после удаления их обоих и перекомпиляции он работает. Я все еще не знаю, что вызывает ошибку, но, по крайней мере, таким образом я достиг того же, что и молчание. Я следил за этим блогом http://brilliantcorners.org/2011/02/building-vim-on-osx-snow-leopard/ для создания vim из источника – npiv

2

В Вставка режим, <C-n> обычно дополняет слова содержимым ваших буферов. Я не знаю, как он работает внутри, но он может жаловаться на длину пути связанного файла буфера.

Но я не могу найти ссылку на E854 в Vim's :help, что может быть нормальным, если оно исходит из плагина, которого у меня нет.

Вы могли:

  • пытаются :verbose imap <c-n> найти свое происхождение или
  • искать помощи для тега E854, :help E854 или
  • искать помощь для жала E854, :helpgrep E854 или
  • Grep для E854 в папке ~/.vim, $ grep -r E854 ~/.vim.
+0

это не из плагина, у вас может быть более старый вид. http://markmail.org/message/w6yj35zjsnlslyic – npiv

+0

Да, 7.3 из 2010 года, это довольно старый. Но искатель не указал, какую версию он использует так ... – romainl

2

У меня была проблема, подобная этому. Оказывается, он взорвался, потому что текущий ruby.vim, который распространяется вместе с Vim, вызывает устаревший Gem.all_load_paths, который вызывает неприятную ошибку в вашей переменной пути. Проверьте https://github.com/rubygems/rubygems/issues/161 и https://groups.google.com/forum/#!msg/vim_dev/wrouKpIDraU/xLxUuMT3_6QJ за исправление :)

Смежные вопросы