Il completamento di Ctrl-n richiede molto tempo per la "scansione del file incluso"


15

Sto migliorando le mie capacità di vim e giocherellando con il completamento usando il comando Ctrl-n. Sto programmando in Perl. Quando sono in modalità insert e premo Ctrl-n, ricevo il messaggio che è "Scansione file incluso" in fondo al terminale e sembra che stia eseguendo la scansione dei file nelle directory di distribuzione del perl. Questo può richiedere alcuni secondi prima che finisca. Sembra che lo faccia con i pacchetti che includo che sono commentati:

#use Moose;

Quindi devo eliminare queste righe affinché questa funzione abbia valore. Mi sto perdendo qualcosa?

Sto usando il plugin perl-support.


Ho provato qualcosa di simile in .vimrc ma ha avuto effetto:let g:ctrlp_custom_ignore = { 'dir': '^/usr/' } let g:ctrln_custom_ignore = { 'dir': '^/usr/' }
StevieD

Risposte:


13

Per impostazione predefinita, quando premi C-no C-p, Vim guarda all'interno di varie fonti per trovare candidati che popoleranno il menu di completamento.

Queste origini possono essere configurate con l' 'complete'opzione buffer-local .

Il valore di questa opzione è un elenco di flag separati da virgola. Ogni bandiera ha il suo significato descritto in :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 "]"

Per impostazione predefinita, il suo valore è .,w,b,u,t,i, che significa:

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

Se ritieni che la scansione dei file inclusi richieda troppo tempo, puoi provare a rimuovere il iflag 'cpt'dall'opzione.

Se si desidera rimuoverlo dal valore globale, per influire su tutti i buffer per impostazione predefinita, si dovrebbe scrivere nel vimrc:

setglobal complete-=i

Se volessi fare la stessa cosa, ma solo per i perlfile, potresti installare un autocmd nel tuo vimrc:

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

O meglio, è possibile creare un plug-in di tipo di file, ad esempio ~/.vim/after/ftplugin/perl.vim, in cui scrivere semplicemente:

setlocal complete-=i

Per scoprire quali sono gli attuali valori globali e locali della tua 'complete'opzione e dove sono stati impostati l'ultima volta, puoi usare questi comandi:

verbose setglobal complete?
verbose setlocal complete?

O più breve:

verb setg cpt?
verb setl cpt?

Se l'unica fonte a cui sei interessato è il buffer corrente, allora, invece di usare C-n, potresti usare C-x C-n. Vedi :h i_^x^nper maggiori informazioni.


1
C'è un modo per escludere le parole chiave nei file in determinati percorsi?
StevieD,

I documenti di Vim 'complete'citano "file inclusi", ma non si collegano a maggiori dettagli sul significato. Quindi, leggi :he include-search. Lì, puoi vedere che l' 'include'opzione definisce cosa significa e 'path'viene utilizzata per la ricerca. Questi sono utili per una personalizzazione più precisa rispetto alla semplice attivazione / disattivazione dell'intera funzione.
jwd,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.