Gerakan lag titik (kursor) Emacs

12

Saat berjalan previous-line, C-patau <up>kursor melompat garis tanpa ada masalah atau kelambatan. Saat berlari next-line, C-natau <down>kursor dengan benar melompat ke bawah garis, tetapi dengan jeda yang signifikan. Ketika saya menahan tombol bawah saya bahkan tidak bisa melihat titik bergerak, itu hanya muncul di suatu tempat di bawah ini. Saya menjalankan profiler Emacs dan sepertinya pelakunya cl-position. Apa yang berhasil adalah bahwa previous-linesecara harfiah hanya menggerakkan kursor, sementara next-linemenjalankan banyak fungsi.

Output profiler

Apa masalahnya dan bagaimana cara memperbaikinya?

Damian Chrzanowski
sumber
Apakah Anda menggunakan visual-line-mode? Apakah Anda memiliki garis yang sangat panjang?
Drew
Saya tidak menggunakan visual-line-modedan saya tidak memiliki garis panjang.
Damian Chrzanowski

Jawaban:

23

Saya telah menemukan jawaban untuk pertanyaan saya dengan mempersempit bagian yang nakal dan googling. Saya telah berhasil mengurangi lag 10 KALI !!!! Maksudku .... Ini gila pada berapa banyak daya komputasi next-lineyang digunakan untuk memindahkan kursor ke bawah?!?!

Cara mengatasinya:

Masukkan kode ini ke init.el Anda: (setq auto-window-vscroll nil)

Bukti:

Lag berkurang secara signifikan

Karena itu sekarang next-linetidak memicu line-move-partialmengurangi lag. Saya tidak ingat pengaturan auto-window-vscrolluntuk t. Itu tidak ada di mana pun di .elfile saya , saya tidak yakin bagaimana mengaturnya tuntuk memulai. Jadi jika ada yang memiliki masalah kinerja dengan pergerakan kursor, maka perbaikan di atas akan mengurangi lag dari sekitar 50% -80% waktu cpu menjadi 5% waktu cpu !!!

Untuk dengan cepat memeriksa apakah Anda terpengaruh jalankan saja C-h v auto-window-vscroll. Jika disetel ke tAnda mungkin memiliki masalah kinerja utama. Verifikasi dengan profiler Emacs jika gerakan kursor memang menyebabkan kelambatan.

Best of luck sesama pecinta Emacs !!!

Sumber perbaikan

Damian Chrzanowski
sumber
Silakan mempertimbangkan pengajuan Emacs bug (atau permintaan tambahan) untuk ini: M-x report-emacs-bug.
Drew
2
Akan lakukan, karena saya bisa melihat ini menjadi masalah bagi banyak orang.
Damian Chrzanowski
1
Terima kasih, Damian, itu meningkatkan kinerja tetapi saya masih merasa sedikit tidak responsif
Neeraj Verma
3

Saya tidak benar-benar yakin apa masalahnya, tetapi laporan profiler Anda tampaknya menunjukkan bahwa posn-at-point melakukan lebih banyak tampilan ulang daripada yang diharapkan, yang pada gilirannya menyebabkan perhitungan ulang dari mode-line, dan bahwa powerline harus melakukan lebih banyak upaya untuk memoize perhitungannya untuk modeline.

TKI, saya sarankan Anda M-x report-emacs-bugdan Anda juga dapat melaporkan bug ke pengelola saluran listrik.

Stefan
sumber
0

Sepertinya Anda menggunakan kabel listrik. Secara khusus, Anda menampilkan nama proyek proyektil dalam modeline Anda. Ada beberapa perbaikan pada paket proyektil baru-baru ini yang telah memitigasi sebagian dari itu. Pastikan Anda up to date.

https://github.com/bbatsov/projectile/issues/1212

https://github.com/bbatsov/projectile/pull/1213

Dimungkinkan juga untuk menghafal fungsi yang dipanggil oleh modeline. Saya sudah melakukan ini banyak pada modeline saya untuk membuatnya sangat cepat.

Aaron Jensen
sumber
Masalahnya telah dipecahkan, Proyektil atau saluran Listrik bukanlah masalahnya
Damian Chrzanowski
Saya senang Anda mendapatkannya diurutkan. Profil Anda memang menunjukkan perlambatan yang berasal dari proyektil. Bisa jadi pengaturan auto-window-vscroll ke nil hanya menyebabkan emacs untuk melewatkan perhitungan mode-line yang tidak perlu. Bagaimanapun, senang Anda mendapatkannya diurutkan!
Aaron Jensen
Itu poin yang bagus. Saya benar-benar tidak punya waktu untuk memeriksa paket mana yang menjadi masalah. Terima kasih atas sarannya!
Damian Chrzanowski
0

Saya perhatikan bahwa saya doom-modelinejuga berkontribusi terhadap lag. Bahkan, dikatakan dalam dokumen doom-modeline:

 ;; If it brings the sluggish issue, disable `doom-modeline-enable-word-count' or
 ;; remove the modes from `doom-modeline-continuous-word-count-modes'.

Setelah pengaturan (setq doom-modeline-enable-word-count nil)saya mendapatkan kecepatan yang terlihat dalam gerakan kursor.

Jason
sumber