Bagaimana cara melihat plugin mana yang membuat Vim lambat?

318

Apakah ada cara untuk profil plugin Vim?

MacVim saya menjadi lebih lambat dan lebih lambat ketika saya membuka yang besar .py. Saya tahu saya bisa membatalkan pilihan semua plugin dan memilih kembali satu per satu untuk memeriksa plugin mana yang menjadi penyebabnya, tetapi apakah ada cara yang lebih cepat?

Dotvim saya ada di sini: https://github.com/charlax/dotvim

pembohong
sumber
1
Sebenarnya, startup itu baik-baik saja. Vim menjadi lambat setelah beberapa menit digunakan. Ini terutama menyangkut .pyfile.
charlax
Pencarian biner adalah cara untuk pergi. Anda telah menanyakan pertanyaan Anda 2 jam yang lalu, penyebab masalah Anda akan ditemukan pada saat itu. Firasat Ingo Karkat autocmdkedengarannya masuk akal bagiku.
romainl
Itu benar - tetapi tidakkah Anda berpikir bahwa jika ada cara untuk mendapatkan hasil yang sama bahkan dalam satu jam, itu lebih baik? Terlebih lagi, startup baik-baik saja, setelah beberapa menit digunakan, jadi itu akan memakan waktu yang sangat lama. autocmdterlihat keren. Hanya mencobanya tetapi Vim tidak lambat sekarang.
charlax
1
Hanya menghadapi masalah yang sama, tetapi pada file ruby ​​besar. Ditemukan yang folding=syntaxbisa melambat. Sudah dicoba folding=manualdan sekarang semuanya bekerja dengan baik
Aleksandr K.

Jawaban:

496

Anda dapat menggunakan dukungan profil bawaan: setelah meluncurkan vim do

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

(tidak seperti berhenti noautocmdtidak benar-benar diperlukan, itu hanya membuat vim berhenti lebih cepat).

Catatan: Anda tidak akan mendapatkan informasi tentang fungsi yang telah dihapus sebelum vim berhenti.

ZyX
sumber
13
Ini luar biasa. Saya dapat melihat bahwa EasyTags adalah pelakunya. Terima kasih banyak!
charlax
5
ini membantu saya mendeteksi "vim-gitgutter" sebagai penyumbat.
Sebastián Grignoli
6
@subjectego :set more | verbose function {function_name}akan menunjukkan kepada Anda konten fungsi dan di mana letaknya.
ZyX
26
Jika tidak jelas, hasilnya profile.logadalah file di direktori saat sesi Vim Anda.
Micah Smith
7
Langsung ke akhir profile.loguntuk melihat daftar fungsi yang diurutkan berdasarkan waktu total ( profile.logsepertinya tidak berguna bagi saya sebelum saya menemukan ada daftar yang diurutkan di akhir).
Andrey Portnoy
78

Saya menemukan metode buildm vim lain yang sangat membantu untuk menunjukkan pesan waktu yang tepat saat memuat.

vim --startuptime timeCost.txt timeCost.txt

Silakan jalankan:

:help --startuptime

di VIM untuk mendapatkan informasi lebih lanjut.

feihu
sumber
3
Kalau-kalau ada orang lain yang bertanya-tanya, ini tidak ada di semua distro vim / gvim. Tidak dalam stok Menangkan Gvim 7.4 di sini (meskipun didokumentasikan dalam viminfo)
thynctank
1
@thynctank saya mencoba pada gvim 7.4 saya dan berhasil. Ini versi sayaIM - Vi IMproved 7.4 (2013 Aug 10, compiled Aug 10 2013 14:33:40)
feihu
Jawaban Terbaik! Membantu saya mengidentifikasi plugin paling lambat yang membuat saya marah di setiap awal vim. Terima kasih :)
kovpack
Ini dan dasar -Vmenunjukkan itu adalah non-lokal yang $HOMEmenyebabkan masalah
bsb
Anda perlu menjalankan :euntuk menyegarkan file. Sortir file di tempat sesuai dengan total waktu yang diambil untuk setiap op seperti:%! sort -k2 -nr
Ashutosh Jindal
31

Itu bisa berupa plugin atau penyorotan sintaksis; coba :syntax offketika ini terjadi dan lihat apakah Vim langsung menjadi lebih cepat.

Dengan plugins, "kelambatan umum" biasanya berasal dari perintah otomatis; a :autocmdmencantumkan semuanya. Selidiki dengan membunuh beberapa dari mereka melalui :autocmd! [group] {event}. Lanjutkan dari acara yang lebih sering (yaitu CursorMoved[I]) ke yang lebih jarang (mis BufWinEnter.).

Jika Anda dapat mereproduksi kelambatan dengan agak andal, pencarian biner mungkin membantu: Pindahkan setengah dari file ~/.vim/plugin/, lalu yang lain, ulangi di set yang lambat.

Jika Anda benar-benar perlu mencari di bawah kap, dapatkan versi Vim yang memiliki :profileperintah diaktifkan. (Bukan versi vanilla BIG Windows, tetapi yang dikirim bersama Cygwin memilikinya; juga, kompilasi sendiri cukup mudah di sebagian besar distro.)

Ingo Karkat
sumber
17

Saya merasa terbantu untuk mencetak semua aktivitas Vim ke file dengan memulai Vim dengan -Vopsi:

vim -V12log

Ini memberikan verbositas maksimum (level 12) dan mengeluarkannya ke file log. Anda kemudian dapat melakukan beberapa tindakan Vim yang Anda tahu lambat, dan kemudian melihat fungsi / pemetaan yang dipanggil secara internal.

Pangeran Goulash
sumber
10
tetapi tidak ada waktu pada log
Kokizzu
7

Jika Anda mengalami masalah dengan operasi pembaruan layar ( ^L, gulir, dll.) Lambat, masalah Anda mungkin file sorotan sintaksis tidak efisien. Anda dapat menguji ini dengan menonaktifkan sementara penyorotan sintaks ( :syn off) dan melihat apakah masalahnya hilang; jika Anda ingin menggali rinciannya, Anda dapat membuat profil file sintaksis saat ini menggunakan :syntime:

  1. Buka file yang menyebabkan sintaks menyoroti masalah kinerja.
  2. Jalankan :syntime onuntuk mulai membuat profil.
  3. Gulir sedikit file.
  4. Jalankan :syntime reportuntuk menghasilkan laporan. Pola-pola yang tercantum pertama dalam laporan adalah pola yang membutuhkan waktu paling lama untuk diproses.
duskwuff -inactive-
sumber
2
Jika memang sepertinya file highlight sintaks adalah pelakunya, apa tindakan selanjutnya?
Penonton 6