Завершення Ctrl-n займає багато часу для "сканування включеного файлу"


16

Я підбираю свої навички vim і виконую завершення за допомогою команди Ctrl-n. Я програмую в Perl. Коли я перебуваю в режимі вставки та натискаю Ctrl-n, я отримую повідомлення про те, що це "Сканування включеного файлу" внизу терміналу, і схоже, що це сканування файлів у каталогах розповсюдження perl. Це може зайняти кілька секунд, перш ніж воно закінчиться. Схоже, це робиться з пакетами, які я включаю і коментуються:

#use Moose;

Тому я повинен видалити ці рядки, щоб ця функція мала будь-яке значення. Я щось пропускаю?

Я використовую плагін Perl-підтримки.


Я спробував щось подібне у .vimrc, але це вплинуло:let g:ctrlp_custom_ignore = { 'dir': '^/usr/' } let g:ctrln_custom_ignore = { 'dir': '^/usr/' }
StevieD

Відповіді:


14

За замовчуванням, коли ви натискаєте C-nабо C-p, Vim зазирає в різні джерела, щоб знайти кандидатів, які заповнять меню завершення.

Ці джерела можна налаштувати за допомогою локального буфера 'complete'.

Значення цієї опції - розділений комою список прапорів. Кожен прапор має своє значення, описане в :h 'cpt:

.   scan the current buffer ('wrapscan' is ignored)
w   scan buffers from other windows
b   scan other loaded buffers that are in the buffer list
u   scan the unloaded buffers that are in the buffer list
U   scan the buffers that are not in the buffer list
k   scan the files given with the 'dictionary' option
kspell  use the currently active spell checking |spell|
k{dict} scan the file {dict}.  Several "k" flags can be given, patterns are valid too.  For example:  
        :set cpt=k/usr/dict/*,k~/spanish
s   scan the files given with the 'thesaurus' option
s{tsr}  scan the file {tsr}.  Several "s" flags can be given, patterns are valid too.
i   scan current and included files
d   scan current and included files for defined name or macro |i_CTRL-X_CTRL-D|
]   tag completion
t   same as "]"

За замовчуванням його значення становить .,w,b,u,t,i, що означає:

   1. the current buffer
   2. buffers in other windows
   3. other loaded buffers
   4. unloaded buffers
   5. tags
   6. included files

Якщо ви виявите, що сканування включених файлів займає занадто багато часу, ви можете спробувати видалити iпрапор із цієї 'cpt'опції.

Якщо ви хочете вилучити його із загального значення, вплинути на всі буфери за замовчуванням, ви напишіть у своєму vimrc:

setglobal complete-=i

Якщо ви хочете зробити те саме, але лише для perlфайлів, ви можете встановити autocmd всередині вашого vimrc:

augroup PerlSettings
    autocmd!
    autocmd FileType perl setlocal complete-=i
augroup END

Або ще краще, ви можете створити плагін для файлового типу, наприклад ~/.vim/after/ftplugin/perl.vim, у якому ви просто напишете:

setlocal complete-=i

Щоб перевірити, які поточні глобальні та локальні значення вашого 'complete'параметра та де вони були останньо встановлені, ви можете використовувати ці команди:

verbose setglobal complete?
verbose setlocal complete?

Або коротше:

verb setg cpt?
verb setl cpt?

Якщо єдиним джерелом, яке вас цікавить, є поточний буфер, то замість цього C-nви можете використовувати C-x C-n. Див. Для :h i_^x^nотримання додаткової інформації.


1
Чи є спосіб виключити ключові слова у файлах певними шляхами?
StevieD

Документи Vim для 'complete'згадування "включені файли", але не посилаються на більш детальну інформацію про те, що це означає. Отже, читайте :he include-search. Там ви бачите, що 'include'параметр визначає, що це означає, і 'path'використовується для пошуку. Вони корисні для тоншої настройки, ніж просто увімкнення / вимкнення всієї функції.
jwd
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.