Время запуска Vim
Кому как, а я до сих пор не могу определиться с “лучшим” редактором. Сколько лет постоянно пользуюсь то vim, то emacs. После чего переключаюсь на vscode или им подобным. И снова возвращаюсь к vim, потом emacs…
В последние несколько недель снова переключился на vim. Переработал его конфигурацию. И все устраивало, ровно до тех пор, пока не попробовал использовать файловый менеджер nnn . Великолепный файловый менеджер, быстрый и удобный. И в качестве редактора прописал в нем vim. Каково же было мое удивление, когда при попытке открыть файл в редакторе пришлось сидеть и ждать, пока он не запуститься…
Причем повторялось это каждый раз при попытке запуска. Переключился на nano, файл стал открываться мгновенно. Странно, всегда считал, что vim запускается быстро. И до сих пор даже крупные проекты открывал в нем, не замечая каких-либо тормозов. Решил провести измерения.
$ time vim
real 0m2.622s
user 0m0.752s
sys 0m0.089s
То есть чистый запуск занимает почти 3 секунды времени.
$ vim --startuptime vim.log
Генерирует файл vim.log, в котором содержится информация по времени запуска. На OSX получил следующие результаты:
000.011 000.011: --- VIM STARTING ---
000.126 000.115: Allocated generic buffers
000.519 000.393: locale set
000.524 000.005: clipboard setup
000.534 000.010: window checked
001.198 000.664: inits 1
001.202 000.004: parsing arguments
001.203 000.001: expanding arguments
005.128 003.925: shell init
005.476 000.348: Termcap init
005.493 000.017: inits 2
005.654 000.161: init highlight
008.449 002.094 002.094: sourcing /Users/juev/.vim/autoload/plug.vim
Тут приведен далеко не полный лог, но уже по самому началу видно, что на львиная доля времени тратиться на инициализацию интеграции с системой.
Попробуем запустить без файла конфигурации, то есть чистый vim:
$ time vim -u NONE --startuptime vim2.log
real 0m1.385s
user 0m0.017s
sys 0m0.013s
При этом лог старта оказывается довольно коротким:
times in msec
clock self+sourced self: sourced script
clock elapsed: other lines
000.008 000.008: --- VIM STARTING ---
000.117 000.109: Allocated generic buffers
000.573 000.456: locale set
000.578 000.005: clipboard setup
000.589 000.011: window checked
001.184 000.595: inits 1
001.190 000.006: parsing arguments
001.190 000.000: expanding arguments
005.096 003.906: shell init
005.429 000.333: Termcap init
005.447 000.018: inits 2
005.605 000.158: init highlight
005.607 000.002: sourcing vimrc file(s)
005.612 000.005: inits 3
005.659 000.047: setting raw mode
005.666 000.007: start termcap
005.681 000.015: clearing screen
005.771 000.090: opening buffers
005.773 000.002: BufEnter autocommands
005.779 000.006: editing files in windows
005.824 000.045: VimEnter autocommands
005.829 000.005: before starting main loop
006.404 000.575: first screen update
006.407 000.003: --- VIM STARTED ---
И опять основная масса времени уходит на инициализацию интеграции с системой. Полторы секунды удается выиграть за счет отказа от файла конфигурации. И даже в этом случае на старт приложения уходит еще полторы секунды.
В Linux удалось добиться ускорения запуска без отключения конфигурационного файла за счет запуска с ключом -X. Ключ который отключает интеграцию с системой, в том числе и использование системного clipboard. После чего время запуска стало вполне комфортным.