Время запуска Vim

27 November 2018 #vim#soft

Кому как, а я до сих пор не могу определиться с “лучшим” редактором. Сколько лет постоянно пользуюсь то 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. После чего время запуска стало вполне комфортным.