Come vedere quali plugin stanno rallentando Vim?


318

C'è un modo per profilare i plugin di Vim?

Il mio MacVim diventa sempre più lento quando apro una grande .py. So che potrei deselezionare tutti i plugin e selezionare nuovamente uno per uno per verificare quale plugin è il colpevole, ma c'è un modo più veloce?

Il mio dotvim è qui: https://github.com/charlax/dotvim



1
In realtà, l'avvio va bene. Vim diventa lento dopo alcuni minuti di utilizzo. Riguarda in particolare i .pyfile.
charlax,

La ricerca binaria è la strada da percorrere. Hai fatto la tua domanda 2 ore fa, la causa del tuo problema sarebbe stata trovata in quel momento. L' autocmdintuizione di Ingo Karkat mi sembra la prima plausibile.
romainl

È vero, ma non pensi che se c'è un modo per ottenere lo stesso risultato anche in un'ora, è meglio? Inoltre, l'avvio va bene, è dopo alcuni minuti di utilizzo, quindi ci sarebbe voluto molto tempo. autocmdsembra fico. Ho appena provato, ma Vim non è lento in questo momento.
charlax,

1
Ho appena affrontato lo stesso problema, ma su file ruby ​​di grandi dimensioni. Trovato che folding=syntaxpuò rallentare. Ho provato folding=manuale ora tutto funziona bene
Aleksandr K.

Risposte:


496

È possibile utilizzare il supporto di profilazione integrato: dopo aver avviato vim do

:profile start profile.log
:profile func *
:profile file *
" At this point do slow actions
:profile pause
:noautocmd qall!

(a differenza del noautocmdfatto che non è necessario smettere , rende Vim quit più veloce).

Nota: non otterrai informazioni sulle funzioni che sono state eliminate prima della chiusura di Vim.


13
Questo è fantastico Sono stato in grado di vedere che EasyTags è il colpevole. Molte grazie!
charlax,

5
questo mi ha aiutato a rilevare "vim-gitgutter" come l'intasamento.
Sebastián Grignoli,

6
@subjectego :set more | verbose function {function_name}ti mostrerà i contenuti delle funzioni e dove si trovano.
ZyX,

26
Se non è chiaro, il risultato profile.logè un file nella directory corrente della sessione Vim.
Micah Smith,

7
Vai alla fine di profile.logper vedere l'elenco delle funzioni ordinate per tempo totale ( profile.logmi è sembrato inutile prima di trovarlo, alla fine c'è un elenco ordinato).
Andrey Portnoy,

78

Ho trovato un altro metodo di compilazione di Vim molto utile per mostrare esattamente i messaggi di temporizzazione durante il caricamento di .vimrc.

vim --startuptime timeCost.txt timeCost.txt

Si prega di eseguire:

:help --startuptime

in VIM per ottenere maggiori informazioni.


3
Nel caso in cui qualcuno si stia chiedendo, questo non esiste in tutte le distro vim / gvim. Non in stock Win Gvim 7.4 qui (anche se è documentato in viminfo)
thynctank

1
@thynctank Ho provato sul mio gvim 7.4 e ha funzionato. Ecco la mia versioneIM - Vi IMproved 7.4 (2013 Aug 10, compiled Aug 10 2013 14:33:40)
feihu

Migliore risposta! Mi ha aiutato a identificare il plugin più lento che mi ha fatto arrabbiare ad ogni avvio di VIM. Grazie :)
kovpack

Questo e di base -Vmostravano che si trattava di un $HOMEproblema non locale che causava
bsb l'

È necessario eseguire :eper aggiornare il file. Ordina il file in posizione in base al tempo totale impiegato per ciascuna operazione in questo modo:%! sort -k2 -nr
Ashutosh Jindal

31

Potrebbe essere un plugin o l'evidenziazione della sintassi; prova a :syntax offquando ciò accade e vedi se Vim diventa immediatamente più veloce.

Con i plugin, una "lentezza generale" di solito proviene dai comandi automatici; a :autocmdli elenca tutti. Indaga uccidendone alcuni via :autocmd! [group] {event}. Procedere da eventi più frequenti (ad es. CursorMoved[I]) A eventi meno frequenti (ad es BufWinEnter.).

Se riesci a riprodurre in qualche modo in modo affidabile la lentezza, una ricerca binaria potrebbe aiutare: spostare via metà dei file ~/.vim/plugin/, quindi l'altro, ripetere nel set che era lento.

Se hai davvero bisogno di guardare sotto il cofano, ottieni una versione di Vim con il :profilecomando abilitato. (Non è la versione BIG di Windows vaniglia, ma ce l'ha quella fornita con Cygwin; inoltre, l'auto-compilazione è abbastanza facile nella maggior parte delle distro.)


17

Ho trovato utile stampare tutte le attività di Vim su un file avviando Vim con l' -Vopzione:

vim -V12log

Ciò fornisce la massima verbosità (livello 12) e l'output nel file log. È quindi possibile eseguire alcune azioni di Vim che si ritiene siano lente e quindi vedere quali funzioni / mappature vengono chiamate internamente.


10
ma non ci sono tempi sul registro
Kokizzu,

7

Se riscontri problemi con le operazioni di aggiornamento dello schermo ( ^Lscorrimento, ecc.) Lente, il tuo problema potrebbe essere un file di evidenziazione della sintassi inefficiente. Puoi testarlo disabilitando temporaneamente l'evidenziazione della sintassi ( :syn off) e vedendo se il problema scompare; se vuoi scavare nei dettagli, puoi profilare il file di sintassi corrente usando :syntime:

  1. Apri un file che causa la sintassi che evidenzia problemi di prestazioni.
  2. Esegui :syntime onper iniziare la profilazione.
  3. Scorri un po 'il file.
  4. Esegui :syntime reportper generare un rapporto. I modelli elencati per primi nel rapporto sono quelli che hanno impiegato più tempo per l'elaborazione.

2
Se sembra che il colpevole sia il file di evidenziazione della sintassi, qual è il prossimo piano d'azione?
Spectator6
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.