เวลาเริ่มต้น Profiling Vim


143

ฉันมีปลั๊กอินจำนวนมากที่เปิดใช้งานเมื่อใช้ Vim - ฉันได้รวบรวมปลั๊กอินมาหลายปีแล้ว ฉันรู้สึกเบื่อหน่ายกับระยะเวลาที่ Vim เริ่มต้นในตอนนี้ดังนั้นฉันจึงต้องการสร้างโปรไฟล์การเริ่มต้นและดูว่าปลั๊กอินใดที่ฉันมีส่วนรับผิดชอบ

มีวิธีใดบ้างในการกำหนดโปรไฟล์การเริ่มต้นหรือการเรียกใช้สคริปต์ของ Vim ตามหลักการแล้วฉันต้องการทราบว่า Vim ใช้เวลานานเท่าใดในการโหลดสคริปต์ Vim แต่ละครั้ง

คำตอบ:


192

หากคุณใช้ Vim 7.2.269 หรือใหม่กว่าจะมีตัวเลือก --startuptime ที่คุณสามารถใช้ได้

vim --startuptime vim.log

จากความช่วยเหลือ ( vim -h):

--startuptime <file> Write startup timing messages to <file>

4
และในแพตช์ 7.2.286 ไม่จำเป็นต้องมีเครื่องหมายเท่ากับ "vim --startuptime vim.log"
jamessan

27
ถ้าคุณต้องการให้พิมพ์ลองvim --startuptime /dev/stdout +qall
Capi Etheriel

1
@barraponto นอกจากนี้time vim +qหากคุณต้องการเวลาเริ่มต้นของกลุ่มโดยรวมเท่านั้น
Braden Best

ใน terminal ของฉันมีความแตกต่างอย่างมีนัยสำคัญระหว่างและvim --startuptime /dev/stdout +qall vim --startuptime vim.log +qall; cat vim.log
Hotschke

41

ฉันสร้างนี้โครงการ Github เพื่อคำตอบที่ดีสำหรับคำถามของคุณ โดยทั่วไปจะสรุปเวลาสำหรับแต่ละฟังก์ชันที่เรียกใช้ปลั๊กอินทุกตัวซึ่งไม่ชัดเจน (แต่สำคัญ) จากเอาต์พุตโปรไฟล์กลุ่มดิบ รองรับ Bash, Python, R, Ruby สำหรับการสร้างผลการทำโปรไฟล์

คุณจะได้ผลลัพธ์ดังนี้:

vim-plugins-profile figure

พร้อมกับเอาต์พุตข้อความเช่นนี้:

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!    

ฉันไม่สามารถเพิ่มตัวเลขได้เนื่องจากชื่อเสียงต่ำ คุณสามารถเพิ่มในรูปได้โดยเพียงแค่เพิ่ม!ก่อนแท็ก
hyiltiz

ดีมาก! ตรวจสอบกลุ่มของฉันด้วย> 60 ms ^ ^ สิ่งนี้สามารถช่วยให้คุณค้นหาแพ็คเกจที่ทำให้คุณช้าลงได้อย่างรวดเร็ว (ซึ่งในกรณีของฉันก็ยังไม่มีอะไรเลย: D)
SidOfc

40

คุณสามารถใช้กลไกการสร้างโปรไฟล์ของตัวเองเป็นกลุ่ม:

vim --cmd 'profile start profile.log' \
    --cmd 'profile func *' \
    --cmd 'profile file *' \
    -c 'profdel func *' \
    -c 'profdel file *' \
    -c 'qa!'

หลังจากเรียกใช้งานข้างต้นคุณจะพบไฟล์ชื่อ profile.log ในไดเร็กทอรีปัจจุบันพร้อมข้อมูลที่จำเป็นทั้งหมด หากต้องการรับตารางข้อมูลต่อสคริปต์ที่คล้ายกับที่มีอยู่แล้วต่อฟังก์ชันหนึ่งให้ใช้ (หลังจากเปิดไฟล์นี้ในกลุ่ม):

" 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คำสั่งในตัวได้ตลอดเวลาหากจำนวนสคริปต์มากเกินไป


ฉันไม่ทราบว่ากลุ่มมีคำสั่งทำโปรไฟล์ขอบคุณที่ชี้ให้เห็นสิ่งนี้
เบญจ

@Benj มันปิดได้ ตามเอกสารคุณอาจต้องการกลุ่มที่มีคุณสมบัติจำนวนมากหรือรวบรวมด้วยตัวเองซึ่งคุณเปิดใช้งานโปรไฟล์ + อย่างชัดเจนโดยไม่ต้องเปิดใช้งานชุดนี้
ZyX

2
จะ +3 นี้ถ้าฉันทำได้ มันช่วยให้ฉันติดตามการเช็คอินdbext.vimซึ่งใช้เวลากว่าสามวินาทีgithub.com/johnsyweb/dotfiles/commit/09c3001
Johnsyweb

@ZyX ฉันจะทำสิ่งนี้ใน windows shell (gvim) ได้อย่างไร มันไม่ทำงานใน windows gvim ฉันแทรกคำสั่งนี้ใน windows shell gvim --cmd 'profile start profile.log' --cmd 'profile func *' --cmd 'profile file *' -c 'profdel func *' -c 'profdel file *' -c 'qa!'มันสร้างไฟล์ว่างจำนวนมากเป็นกลุ่ม
Reman

@Remonn ใช้เครื่องหมายคำพูดคู่ หรือทุบตีจาก cygwin
ZyX

21

คุณสามารถเรียกใช้vim -Vไพพ์เอาต์พุตผ่านยูทิลิตี้ที่เพิ่มการประทับเวลาและวิเคราะห์ผลลัพธ์ บรรทัดคำสั่งนี้ทำสิ่งนี้เช่น:

vim -V 2>&1 | perl -MTime::HiRes=time -ne 'print time, ": ", $_' | tee vilog

คุณอาจต้องพิมพ์สุ่มสี่สุ่มห้า:qเพื่อกลับไปที่ข้อความแจ้งของคุณ หลังจากนั้นคุณควรค้นหาไฟล์vilogในไดเร็กทอรีปัจจุบันของคุณโดยมีการประทับเวลาที่เริ่มต้นของแต่ละบรรทัด

หากคุณสามารถทำได้เพียงเสี้ยววินาทีคุณสามารถทำได้:

vim -V 2>&1 | perl -ne 'print time, ": ", $_' | tee vilog

3
คุณทราบหรือไม่ว่า "perl -n" ทำ while (<>) {} ให้คุณ
เบญจา

1
ตอนนี้ที่คุณพูดถึง: ใช่ฉันทำ ฉันจะแก้ไขคำตอบเพื่อรับคำสั่งที่สั้นลง ขอบคุณ.
innaM

20

จากงานที่ทำโดย@hyiltizซึ่งขึ้นอยู่กับ R ฉันได้สร้างโปรไฟล์เวอร์ชัน Pythonเนื่องจากสิ่งนี้มักมีอยู่ในระบบที่ R

นอกจากนี้ยังง่ายกว่าเล็กน้อยในการขยายดังนั้นคุณสมบัติคือ:

  • การตรวจหาโฟลเดอร์ปลั๊กอินโดยอัตโนมัติ
  • พล็อตบาร์ขอบคุณ matplotlib
  • เรียกใช้การวิเคราะห์ในช่วงหลายประหารชีวิตที่จะได้รับเฉลี่ย / ค่าเบี่ยงเบนมาตรฐาน ,
  • สนับสนุนทั้งเป็นกลุ่มและ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
=====================================

vim-profiler


ปลั๊กอินนี้ใช้ไม่ได้กับหน้าต่าง neovim No plugin foundเกิดข้อผิดพลาดคือ
jdhao


5

หากคุณกำลังโหลดปลั๊กอินของคุณจากไฟล์. vimrc สิ่งที่คุณทำได้คือวางqสายบางส่วนผ่านไฟล์เพื่อให้มันออกเพื่อให้คุณสามารถใช้ตัวจับเวลากระบวนการเช่นtimeคำสั่งunix อย่างละเอียดยิ่งขึ้นสิ่งนี้จะมีลักษณะดังนี้:

  1. สำรอง.vimrcไฟล์ที่มีอยู่
  2. แสดงความคิดเห็นทั้งหมดยกเว้นจำนวนปลั๊กอินที่เลือก
  3. แทรกqบรรทัด
  4. โทรtime vimซ้ำ ๆ และเฉลี่ย
  5. กู้คืนข้อมูลสำรอง

มันไม่สวยหรู แต่ฉันคิดว่ามันจะทำให้งานลุล่วง


อืมไม่เลวในการหยิก ฉันได้แบ่ง vimrc ของฉันออกเป็นไฟล์แยกต่างหากจำนวนมากดังนั้นจึงไม่ควรทำให้อัตโนมัติยากเกินไป
เบญจา


1

สะดวกในการติดตาม--startimeเมื่อเปิดไฟล์ใดไฟล์หนึ่ง

gvim app/views/layouts/application.html.erb --startuptime time.log

0

ไม่มีtimeคำสั่งbash ที่สามารถใช้ได้ดังนี้:

time vim

แก้ไข : ไม่รวมเวลาเริ่มต้นของสคริปต์ ใช้คำแนะนำของ @jamessan แทน


ใช่มี แต่นั่นจะบอกคุณได้ว่ากลุ่มนี้ใช้เวลานานแค่ไหนในการเปิดและปิดไม่ใช่ระยะเวลาที่ใช้ในการแยกวิเคราะห์แต่ละสคริปต์
เบญจ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.