Strg-n-Abschluss dauert lange

15

Ich verbessere meine Vim-Fähigkeiten und fummle mit dem Befehl Strg-n an der Fertigstellung herum. Ich programmiere in Perl. Wenn ich mich im Einfügemodus befinde und Strg-n drücke, wird unten im Terminal die Meldung "Eingeschlossene Datei wird gescannt" angezeigt, und es sieht so aus, als würden Dateien in den Perl-Distributionsverzeichnissen gescannt. Dies kann einige Sekunden dauern, bis der Vorgang abgeschlossen ist. Es sieht so aus, als würde dies mit Paketen geschehen, die ich einbinde und die auskommentiert sind:

#use Moose;

Ich muss also diese Zeilen löschen, damit dieses Feature einen Wert hat. Vermisse ich etwas?

Ich benutze das Perl-Support-Plugin.

StevieD
quelle
Ich habe so etwas in .vimrc versucht, aber es hatte Auswirkungen:let g:ctrlp_custom_ignore = { 'dir': '^/usr/' } let g:ctrln_custom_ignore = { 'dir': '^/usr/' }
StevieD

Antworten:

13

Wenn Sie auf C-noder C-pklicken, durchsucht Vim standardmäßig verschiedene Quellen nach Kandidaten, die das Abschlussmenü füllen.

Diese Quellen können mit der 'complete'Option buffer-local konfiguriert werden .

Der Wert dieser Option ist eine durch Kommas getrennte Liste von Flags. Jede Flagge hat ihre eigene Bedeutung, beschrieben 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 "]"

Der Standardwert ist .,w,b,u,t,i, was bedeutet:

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

Wenn Sie feststellen, dass das Durchsuchen der enthaltenen Dateien zu lange dauert, können Sie versuchen, das iFlag aus der 'cpt'Option zu entfernen .

Wenn Sie es aus dem globalen Wert entfernen möchten, um standardmäßig alle Puffer zu beeinflussen, geben Sie Folgendes ein vimrc:

setglobal complete-=i

Wenn Sie dasselbe tun perlmöchten , aber nur für Dateien, können Sie eine autocmd in Ihrem System installieren vimrc:

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

Oder besser, Sie könnten ein Dateityp-Plugin erstellen ~/.vim/after/ftplugin/perl.vim, in das Sie einfach schreiben würden:

setlocal complete-=i

Mit den folgenden 'complete'Befehlen können Sie überprüfen, welche globalen und lokalen Werte Ihrer Option aktuell sind und wo sie zuletzt festgelegt wurden:

verbose setglobal complete?
verbose setlocal complete?

Oder kürzer:

verb setg cpt?
verb setl cpt?

Wenn die einzige Quelle, an der Sie interessiert sind, der aktuelle Puffer ist, können Sie stattdessen C-nverwenden C-x C-n. Siehe :h i_^x^nfür weitere Informationen.

user9433424
quelle
1
Gibt es eine Möglichkeit, Schlüsselwörter in Dateien in bestimmten Pfaden auszuschließen?
StevieD
In den Vim-Dokumenten wird zwar auf 'complete'"enthaltene Dateien" verwiesen , es wird jedoch nicht auf weitere Details verwiesen, was dies bedeutet. Also lies :he include-search. Dort können Sie sehen, dass die 'include'Option definiert, was das bedeutet, und 'path'für die Suche verwendet wird. Diese sind nützlich, um eine feinere Anpassung vorzunehmen, als nur die gesamte Funktion ein- oder auszuschalten.
JWD