Vim을 사용할 때 많은 플러그인을 사용하도록 설정했습니다. 몇 년 동안 플러그인을 수집했습니다. Vim이 지금 시작하는 데 걸리는 시간에 약간의 불만이 있으므로 시작을 프로파일 링하고 내가 담당하는 많은 플러그인 중 하나를보고 싶습니다.
Vim의 시작 또는 스크립트 실행을 프로파일 링하는 방법이 있습니까? 이상적으로는 Vim 이로 드하는 각 Vim 스크립트에서 Vim이 얼마나 오래 지속되는지 알고 싶습니다.
답변
Vim 7.2.269 이상을 사용하는 경우 –startuptime 옵션을 사용할 수 있습니다.
vim --startuptime vim.log
도움에서 ( vim -h
) :
--startuptime <file> Write startup timing messages to <file>
답변
vim 자체 프로파일 링 메커니즘을 사용할 수 있습니다.
vim --cmd 'profile start profile.log' \
--cmd 'profile func *' \
--cmd 'profile file *' \
-c 'profdel func *' \
-c 'profdel file *' \
-c 'qa!'
위를 실행하면 필요한 모든 정보와 함께 현재 디렉토리에 profile.log라는 파일이 있습니다. 이미 존재하는 기능별 정보와 유사한 스크립트 별 정보 테이블을 얻으려면 다음을 사용하십시오 (vim에서이 파일을 연 후).
" Open profile.log file in vim first
let timings=[]
g/^SCRIPT/call add(timings, [getline('.')[len('SCRIPT '):], matchstr(getline(line('.')+1), '^Sourced \zs\d\+')]+map(getline(line('.')+2, line('.')+3), 'matchstr(v:val, ''\d\+\.\d\+$'')'))
enew
call setline('.', ['count total (s) self (s) script']+map(copy(timings), 'printf("%5u %9s %8s %s", v:val[1], v:val[2], v:val[3], v:val[0])'))
정렬되지는 않지만 :sort
스크립트 수가 너무 많으면 항상 내장 명령을 사용할 수 있습니다 .
답변
귀하의 질문에 더 잘 대답하기 위해이 Github 프로젝트를 만들었습니다 . 기본적으로 모든 플러그인에 대한 각 함수 호출의 타이밍을 요약합니다. 이는 원시 vim 프로파일 출력에서 명확하지 않지만 중요하지는 않습니다. Bash, Python, R, Ruby는 프로파일 링 결과 생성을 위해 지원됩니다.
다음과 같은 결과가 나타납니다.
다음과 같은 텍스트 출력과 함께 :
Generating vim startup profile...
Parsing vim startup profile...
Crunching data and generating profile plot ...
Your plugins startup profile graph is saved
as `profile.png` under current directory.
==========================================
Top 10 Plugins That Slows Down Vim Startup
==========================================
1 105.13 "vim-colorschemes"
2 42.661 "vim-easytags"
3 31.173 "vim-vendetta"
4 22.02 "syntastic"
5 13.362 "vim-online-thesaurus"
6 7.888 "vim-easymotion"
7 6.931 "vim-airline"
8 6.608 "YankRing.vim"
9 5.266 "nerdcommenter"
10 5.017 "delimitMate"
==========================================
Done!
답변
vim -V
타임 스탬프를 추가하고 출력을 분석하는 유틸리티를 통해 출력을 파이프하고 실행할 수 있습니다 . 이 명령 행은 다음을 수행합니다. 예 :
vim -V 2>&1 | perl -MTime::HiRes=time -ne 'print time, ": ", $_' | tee vilog
:q프롬프트로 돌아가려면 맹목적으로 입력해야 할 수도 있습니다 . 그런 다음 vilog
각 줄의 시작 부분에 고용 타임 스탬프가있는 현재 디렉토리에서 파일 을 찾아야합니다 .
1 초 단위로 수행 할 수있는 경우 다음을 수행 할 수 있습니다.
vim -V 2>&1 | perl -ne 'print time, ": ", $_' | tee vilog
답변
R에 의존 하는 @hyiltiz 가 수행 한 작업을 기반으로 필자는 프로파일 러 의 Python 버전 을 만들었습니다 .R 버전 의 시스템에서 더 자주 사용할 수 있기 때문입니다.
확장하기가 약간 더 쉬우므로 기능은 다음과 같습니다.
- 플러그인 폴더 자동 감지
- matplotlib 덕분에 막대 플롯
- 평균 / 표준 편차 를 얻기 위해 여러 실행에 대해 분석을 실행합니다 .
- vim 과 neovim을 모두 지원합니다 .
- 전체 vim 명령 과 함께 사용하여 지연 로딩 기능을 테스트하고 특정 파일 형식으로 파일을 여는 등
- 결과를 csv 파일로 내 보냅니다.
출력은 vim-plugins-profile이 제공하는 것과 유사합니다.
$ vim-profiler.py -p nvim
Running nvim to generate startup logs... done.
Loading and processing logs... done.
Plugin directory: /home/user/.config/nvim/plugged
=====================================
Top 10 plugins slowing nvim's startup
=====================================
1 3.326 vim-fugitive
2 2.936 tcomment_vim
3 2.315 vim-hybrid
4 1.751 lightline.vim
5 0.959 vim-sneak
6 0.943 supertab
7 0.542 vim-surround
8 0.536 fzf.vim
9 0.450 fzf
10 0.434 auto-pairs
=====================================
답변
델타 시간을 보여주기 위해 innaM에 의해 vim -V 솔루션 을 개선했습니다.
vim -V 2>&1 | perl -MTime::HiRes=time -ne '$a = time unless defined $a; print time - $a, ": ", $_' | tee vilog
답변
.vimrc 파일에서 플러그인을로드하는 q
경우 파일을 통해 일부 라인 부분을 종료하여 unix time
명령 과 같은 프로세스 타이머를 사용할 수 있습니다 . 더 철저하게, 이것은 다음과 같습니다
- 기존
.vimrc
파일 백업 - 선택한 플러그인 수를 제외한 모든 주석 처리
q
라인을 삽입- 전화
time vim
repeteadly 평균 - 백업 복원
이것은 우아하지 않지만 작업이 완료 될 것이라고 생각합니다.