ভিম প্রারম্ভকালের সময় প্রোফাইলিং


139

ভিম ব্যবহার করার সময় আমি প্রচুর প্লাগইন সক্ষম করেছি - কয়েক বছর ধরে আমি প্লাগইন সংগ্রহ করেছি। ভিম এখন শুরু হতে কতটা সময় নেয় সে সম্পর্কে আমি কিছুটা বিরক্ত, তাই আমি এর সূচনাটি প্রোফাইল করতে চাই এবং আমার কাছে থাকা প্লাগিনগুলির মধ্যে কোনটি দায়ী তা দেখতে চাই।

ভিমের স্টার্টআপ বা স্ক্রিপ্ট-চালনার কোনও উপায় আছে কি? আদর্শভাবে আমি জানতে চাই যে প্রতিটি ভিম স্ক্রিপ্টটিতে ভারটি কতক্ষণ ব্যয় করে।

উত্তর:


188

আপনি যদি ভিম 7.২.২69। বা তার পরে ব্যবহার করেন তবে আপনি ব্যবহার করতে পারেন - স্টার্টআপটাইম বিকল্প রয়েছে।

vim --startuptime vim.log

সহায়তা থেকে ( vim -h):

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

4
এবং প্যাচ 7.2.286 হিসাবে, কোনও সমান চিহ্নের প্রয়োজন নেই। "ভিম
জামেসান

25
আপনি যদি এটি কেবল এটি মুদ্রণ করতে চান তবে চেষ্টা করুনvim --startuptime /dev/stdout +qall
ক্যাপী ইথেরিয়েল

@ বারাপন্টো এছাড়াও আছে time vim +qযদি আপনি কেবলমাত্র ভিএম এর শুরুতে সামগ্রিকভাবে সময় চান।
ব্র্যাডেন সেরা

আমার টার্মিনালে vim --startuptime /dev/stdout +qallএবং এর মধ্যে একটি উল্লেখযোগ্য পার্থক্য রয়েছে vim --startuptime vim.log +qall; cat vim.log
হটস্কে

40

আপনি ভিএম নিজস্ব প্রোফাইলিং মেকানিজম ব্যবহার করতে পারেন:

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

উপরের চালনার পরে আপনি প্রয়োজনীয় ডিরেক্টরি সহ বর্তমান ডিরেক্টরিতে প্রোফাইল.লগ নামে একটি ফাইল পাবেন। ইতিমধ্যে প্রতি-ফাংশন ওয়ানের অনুরূপ প্রতি স্ক্রিপ্টের তথ্য সারণীটি পেতে, (এই ফাইলটি ভিমে খোলার পরে) ব্যবহার করুন:

" 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স্ক্রিপ্টের সংখ্যা খুব বেশি হলে আপনি সর্বদা অন্তর্নির্মিত কমান্ডটি ব্যবহার করতে পারেন ।


আমি বুঝতে পারিনি যে ভিমের একটি প্রোফাইলিং কমান্ড ছিল, এটি নির্দেশ করার জন্য ধন্যবাদ।
বেঞ্জ

@ বেঞ্জ এটি অক্ষম করা যেতে পারে। দস্তাবেজ অনুসারে আপনাকে হয় বিশাল বৈশিষ্ট্যযুক্ত সেট সহ স্ব-সংকলিত একটি যেখানে আপনি এই সেটটি সক্ষম না করে স্পষ্টভাবে + প্রোফাইল সক্ষম করেছেন তার প্রয়োজন।
জাইএক্স

2
আমি যদি এই +3 করতে পারে। এটি আমাকে একটি চেক ইন সন্ধান করতে সহায়তা করেছে dbext.vim, যা গিথুব.com
জোহেন্সাইওয়েব /

@ জাইএক্স, উইন্ডোজ শেল (জিভিআইএম) এ আমি কীভাবে এটি করতে পারি? এটি উইন্ডোজ জিভিমে কাজ করে না। আমি উইন্ডোজ শেলের মধ্যে এই কমান্ডটি প্রবেশ gvim --cmd 'profile start profile.log' --cmd 'profile func *' --cmd 'profile file *' -c 'profdel func *' -c 'profdel file *' -c 'qa!'করিয়েছি এটি ভিমে অনেকগুলি খালি ফাইল তৈরি করে।
পুনরায় লোকজনে সজ্জিত করা

@ রেমন ডাবল উক্তি ব্যবহার করুন। বা সাইগউইনের কাছ থেকে বাশ।
ZyX

39

আপনার প্রশ্নের আরও উত্তরের জন্য আমি এই গিথুব প্রকল্পটি তৈরি করেছি । মূলত, এটি প্রতিটি প্লাগইনগুলির জন্য প্রতিটি ফাংশন কলের সময়সীমা পূরণ করে, যা কাঁচা ভিএম প্রোফাইল আউটপুট থেকে সুস্পষ্ট নয় (তবে গুরুত্বপূর্ণ)। প্রোফাইলিং ফলাফল তৈরির জন্য ব্যাশ, পাইথন, আর, রুবি সমর্থিত।

আপনি এর মতো ফলাফলের চিত্র পাবেন:

ভিএম-প্লাগইনস-প্রোফাইল ফিগার

পাঠ্য আউটপুট এর পাশাপাশি:

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

2
+1 এটি দুর্দান্ত; তবুও, আমি নিশ্চিত যে এটি প্রশ্নের অন্য দর্শকদের জন্য কার্যকর হবে, যা আশ্চর্যজনকভাবে জনপ্রিয়।
বেনজ

1
@ বেঞ্জ হ্যাঁ, আমি নিজেই প্রোফাইলিং করার চেষ্টা করছিলাম, তখন আপনার প্রশ্নটি খুঁজে পেল। আমি উত্তরগুলি নিয়ে সন্তুষ্ট নই এবং কেবল কিছু উন্নতি করেছি। আমি বিশ্বাস করি 6 বছর প্রবণতাটি কিছুটা পরিবর্তন করে - এটি ক্যান্ডি গ্রাফগুলি পাওয়া খুব সুবিধাজনক!
hyiltiz

খুব সুন্দর! আমার ভিএমও পরীক্ষা করে> 60 এমএস ^। ^ এটি আপনাকে দ্রুত প্যাকেজটি সন্ধান করতে সাহায্য করতে পারে যা আপনাকে অনেকটা ধীর করে দেয় (যা আমার ক্ষেত্রে এখনও কিছুই নয়: ডি)
সিডঅফসি 12:17

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

1
কল্পনাপ্রসূত, কি দুর্দান্ত সমাধান।
বেনজ

3
আপনি কি জানতেন যে "পারল-এন" আপনার জন্য যখন (<>)। Does করে।
বেনজ

1
এখন আপনি এটি উল্লেখ করেছেন: হ্যাঁ, আমি করেছি। আমি সংক্ষিপ্ত কমান্ড পেতে উত্তর সম্পাদনা করতে যাচ্ছি। ধন্যবাদ।
innaM

20

@ এর উপর নির্ভর করে @ হিলটিজ দ্বারা করা কাজের ভিত্তিতে আমি প্রোফাইলারের একটি পাইথন সংস্করণ তৈরি করেছি , যেহেতু এটি এমন একটি সিস্টেমে প্রায়শই পাওয়া যায় যা আর।

এটি প্রসারিত করা কিছুটা সহজ, সুতরাং বৈশিষ্ট্যগুলি হ'ল:

  • প্লাগইন ফোল্ডারের স্বয়ংক্রিয় সনাক্তকরণ,
  • ম্যাটপ্ল্লোলিবকে বার প্লট ধন্যবাদ,
  • গড় / মানক বিচ্যুতি পেতে বেশ কয়েকটি ফাঁসি কার্যকর করার জন্য বিশ্লেষণ চালান ,
  • উভয় সমর্থন তেজ এবং neovim ,
  • অলস-লোডিং বৈশিষ্ট্যগুলি পরীক্ষা করতে, একটি নির্দিষ্ট ফাইল টাইপ সহ একটি ফাইল খোলার জন্য একটি পুরো ভিআইএম কমান্ডের সাহায্যে ব্যবহার করা যেতে পারে ,
  • সিএসভি ফাইলে ফলাফল রফতানি করুন।

আউটপুটটি ভিএম-প্লাগইনস-প্রোফাইলের অনুরূপ:

$ 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
=====================================

তেজ-প্রোফাইলার


এই প্লাগইনটি নেওভিম উইন্ডোগুলির জন্য কাজ করে না। ত্রুটি বার্তাটি হ'ল No plugin found
jdhao

16

আমি ব-দ্বীপের সময়টি প্রদর্শনের জন্য ভিএনএম-ভি সমাধানটি ইননাএম দ্বারা পরিমার্জন করেছি:

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

1
খুব সুন্দর! আমি এটিকে কিছুটা ছোট করার এবং এটিকে আরও "পার্লিশ" করার স্বাধীনতা নিয়েছি।
innaM

5

আপনি যদি আপনার প্লাগইনগুলি একটি .vimrc ফাইল থেকে লোড করে থাকেন তবে আপনি যা করতে পারতেন তা qফাইলটিকে ছেড়ে দেওয়ার জন্য কিছু লাইন অংশে রাখা হয় যাতে আপনি ইউনিক্স timeকমান্ডের মতো একটি প্রসেস টাইমার ব্যবহার করতে পারেন । আরও পুঙ্খানুপুঙ্খভাবে, এটির মতো দেখাবে:

  1. বিদ্যমান .vimrcফাইল ব্যাকআপ
  2. প্লাগইনগুলির একটি নির্বাচিত সংখ্যা ব্যতীত সমস্ত মন্তব্য করুন
  3. একটি qলাইন .োকান
  4. time vimপুনরাবৃত্তি এবং গড় কল
  5. ব্যাকআপ পুনরুদ্ধার

এটি মার্জিত নয় তবে আমি মনে করি এটি কাজটি করবে।


হুম, এক চিমটিও খারাপ না। আমি ইতিমধ্যে আমার ভিএমআরসি প্রচুর পৃথক ফাইলগুলিতে বিভক্ত হয়েছি তাই স্বয়ংক্রিয়রূপে খুব বেশি শক্ত হওয়া উচিত নয়।
বেঞ্জ


1

--startimeকোনও নির্দিষ্ট ফাইল খোলার সময় এটি ট্রেস করা সুবিধাজনক হতে পারে

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

0

এমন কোনও ব্যাশ timeকমান্ড নেই যা ব্যবহার করা যেতে পারে:

time vim

সম্পাদনা : স্ক্রিপ্টগুলি শুরু করার সময় অন্তর্ভুক্ত করে না। পরিবর্তে @ জামেসান পরামর্শ ব্যবহার করুন।


হ্যাঁ, তবে এটি কেবলমাত্র আপনাকে জানায় যে ভিম উন্মুক্ত এবং বন্ধ উভয় ক্ষেত্রে কতক্ষণ সময় নিয়েছিল, প্রতিটি স্ক্রিপ্টকে বিশ্লেষণ করতে কত সময় লেগেছিল।
বেনজ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.