আমি কীভাবে ভিমকে "লেজু - ট" এর মতো আচরণ করব?


36

আমি জানতে চাই যে ভিমের মতো আচরণ করার কোনও উপায় আছে কিনা tail -f
এমনকি আমি এখনও অবধি যে সেরা ভিম প্লাগিন খুঁজে পেয়েছি তা আমার প্রত্যাশা অনুযায়ী হয় না।

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

এই কিভাবে করবেন?
(কিছু লগ ফাইল খুব বড় হওয়ায় আমি পুরো ফাইলটি পুনরায় লোড করতে চাই না। কেবল সর্বশেষ লাইনগুলি লোড করা ভাল tail -f)


2
কেন এটি ভিতরে থাকা উচিত vim? এর সাথে কী হয়েছে tail -f?
সেভেন

1
কারণ আমি লগ ফাইলগুলি পড়ার সময় আমি ভিমের শক্তি চাই। প্যাটার্ন অনুসন্ধান করতে সক্ষম হওয়া এবং বিশেষত বাক্য গঠন হাইলাইট উপভোগ করা পছন্দ করুন Like আমি কিছু লগ ফাইলের (বাইন্ড, অ্যাপাচি, ইত্যাদি) হাইলাইট করে আমার নিজস্ব সিনট্যাক্স তৈরি করেছি।

আপনি অটোর্যাড এবং ফাইলচেনজড শেল >: স্বতঃবৃত্তিতে সহায়তা>> সহায়তা ফাইলচেন্জশেল
-

2
শুধু অনুসন্ধানের জন্য, আপনি এর less +Fপরিবর্তে করতে পারেন tail -f। যদিও আপনাকে সিনট্যাক্স হাইলাইট করে না।
ডেনিস কারসেমেকার

উত্তর:


28

আপনি vimমত আচরণ করতে পারবেন না tail -f। আপনি করতে পারেন lessএকটি সমন্বয় মত আচরণ vimএবং tail -fযদিও।

চিরকাল (ফলো) মোড ফরোয়ার্ড করুন

lessএকটি ফরওয়ার্ড চিরদিনের মোড রয়েছে যা আপনি টিপে Fবা +Fযুক্তি হিসাবে এটিতে প্রবেশের মাধ্যমে প্রবেশ করতে পারেন ।

$ less +F

এই মোডে, এটি এমনভাবে lessআচরণ করে tail -fযে কোনও ফাইলের শেষে পৌঁছালে এটি পড়া বন্ধ হয় না। এটি ক্রমাগত ফাইল থেকে নতুন ডেটা সতেজ করে। এই মোড থেকে প্রস্থান করতে, টিপুন Ctrlc

সিনট্যাক্স হাইলাইট করা

lessএটি পড়ে এমন ডেটা স্বয়ংক্রিয় ফিল্টারিং সমর্থন করে। সোর্স-হাইলাইট নামে একটি প্রোগ্রাম রয়েছে যা বেসিক সোর্স কোড হাইলাইটিং সম্পাদন করতে পারে। এটি এমন স্ক্রিপ্ট নিয়ে আসে যা দিয়ে ভাল কাজ করে less। এটি ব্যবহার করতে, কেবল LESSOPENপরিবেশগত পরিবর্তনশীল যথাযথভাবে সেট করুন ।

 export LESSOPEN="| /path/to/src-hilite-lesspipe.sh %s"

পতাকাটি lessপাস করার মাধ্যমে আপনাকে কাঁচা টার্মিনাল অব্যাহতি সিকোয়েন্সগুলি (এটি আপনার টার্মিনালটি কীভাবে রঙ রঙ করতে হবে তা বলার জন্য) বলতে হবে -R। আপনি lessভান করতে বলতে পারেন পরিবেশের পরিবর্তনশীল -Rসেট করে এটি সর্বদা পতাকাটি পাস করা হচ্ছে LESS

 export LESS=' -R '

যখন lessযথেষ্ট না

যদিও lessভি-এর মতো কী-বাইন্ডিং রয়েছে, এটি কেবল ভিমের মতো নয়। কখনও কখনও এটি বিদেশী বোধ করে এবং এটিতে ctags সংহতকরণ এবং পাঠ্য সম্পাদনা করার দক্ষতার মতো গুরুত্বপূর্ণ বৈশিষ্ট্যগুলির অভাব রয়েছে।

আপনি বর্তমানে যে ফাইলটি lessটিপছেন সেটি ভিমে কল্পনা করতে পারেন (ধরে নিচ্ছেন EDITOR=vim) vlessএমনকি আপনার কার্সারটিকে ভিমের মধ্যে সঠিক স্থানে রাখবে। আপনি যখন ভিমে প্রস্থান করবেন, তখন নিজেকে আবার খুঁজে পাবেন less। আপনি ভিমে থাকাকালীন যদি ফাইলটিতে কোনও পরিবর্তন করেন তবে সেগুলি প্রতিফলিত হবে less


5
vim --servername TAIL_VIM /tmp/somefile

এখন, অন্য শেলের (বাশের মতো), আপনি এটি করতে পারেন:

while true
do
    inotifywait --event modify /tmp/somefile \
    && vim --servername TAIL_VIM --remote-send '<C-\><C-N>:edit!<CR>G';
done

যেখানে <সি -> <সিএন> ভিএমকে সাধারণ মোডে যেতে বাধ্য করে, "সম্পাদনা করুন!" ভিমকে বর্তমান ফাইলটি পুনরায় লোড করতে বলেছে (সিআর সিলেক্ট করে এন্টার চাপছে), এবং জি ফাইলটির নীচে যান। (জি) সরিয়ে ফেলা ফাইল ইনপ্যাক্ট করা সহজ করে ইনপুট আসার সময়।


আমি লোকটিতে "--servername" পরম দেখতে পাচ্ছি, তবে আমি নিম্নলিখিত ত্রুটির বার্তা পেয়েছি:VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Feb 10 2013 02:28:47) Option inconnue: "--servername=toto" Plus d'info avec: "vim -h"
ফক্স

আপনি যদি ভিএম - রূপান্তরটি করেন তবে আপনি কি + ক্লায়েন্টসভার (হাইপেন সহ-ক্লায়েন্টসভার নয়) দেখতে পাচ্ছেন? যদি তা না হয় তবে অনেক লোক। / কনফিগার --with- বৈশিষ্ট্যগুলি = বিশাল
ক্রুটাক্স

হ্যাঁ, সেখানে + ক্লায়েন্ট সার্ভার রয়েছে। আমার উবুন্টু সংস্করণ আছে।
ফক্স

1

ইভান টিটেলম্যানের মন্তব্যে আমি উত্তরটি পেয়েছি । আমার সমাধানটি /usr/share/vim/vimcurrent/macros/less.vim থেকে অনুপ্রাণিত ।

আমি নিজের ফাংশনটি তৈরি করেছিলাম, তবে এটির অনেক উন্নতি হতে পারে।

function! Tailf()
    e
    normal G
    redraw

    sleep 1
    call Tailf()
endfunction

এবং কেবলমাত্র টেইলফ থেকে বেরিয়ে আসার জন্য CTRL + C চাপুন।

টেইলফ মোডে একটি লগ ফাইল খুলতে: view -M "+call Tailf()" /path/to/logfile.log

আমি sleepযা পছন্দ করি না তা হ'ল কলটি, যা অটো-রিফ্রেশের সময় ভিমে কিছু করতে দেয় না। সেরা হবে যদি বাফার স্বায়ত্তশাসিত হয় এবং আপডেট হয় এমনকি আমি অন্য স্প্লিট-উইন্ডোতেও আছি। যাইহোক, এটি একটি ভাল শুরু। :)


2
দেখে মনে হচ্ছে এটি পুরো ফাইলটি আবারও পড়েছে, যা আপনি চেয়েছিলেন তাই না?
বার্নহার্ড

এটি পুরো ফাইলটি পুনরায় লোড করে। ইনোটিফাইয়েটের উপর ভিত্তি করে একটি প্লাগইন তৈরি করা খুব বেশি কঠিন হবে না এবং :readকোনও ফাইল সংশোধন না হওয়া পর্যন্ত এটি অপেক্ষা করে এবং যদি এটি সংযোজন করা হয়ে থাকে তবে ফাইলটির নীচে লাইনগুলিতে পড়ে।

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

@ ইভানটিটেলম্যান ঠিক আছে, আমি এখন কীভাবে ইনোটিফয়েট ব্যবহার করব তা দেখছি। যখনই ফাইল পরিবর্তন হয় আমি জানতে পারি। তবে এটি কীভাবে যুক্ত করা হয়েছে (সম্পূর্ণরূপে সংশোধন করা হয়নি) এবং কীভাবে নতুন লাইন সংযোজন হয়েছে তা কীভাবে জানবেন?
ফক্স

প্রতিবার ফাইল পরিবর্তিত হলে ফাইলের লাইন সংখ্যা পড়ুন। লাইনের সংখ্যা বাড়লে পরিবর্তনগুলিতে পড়ুন।


1

আমি এটি সংক্ষিপ্ত এবং অনেক হ্যাকিং ছাড়াই পছন্দ করি। যখন প্রয়োজন হবে আপনি প্রাক্তন (whithin vim) থেকে এই অনেলাইনারটি চালাতে পারেন (বা লগ-ফাইলগুলি খোলার জন্য প্রতিটি কমান্ডকে vimrc এ বসিয়ে দিন in)

:set autoread | au CursorHold * checktime | call feedkeys("lh")

(যদি আপনি ফাইলটির শেষে প্রায় (প্রায়) ঝাঁপিয়ে পড়তে চান তবে কেবল ফিডকি দিয়ে "lh" এর পরিবর্তে "G" ব্যবহার করুন)

ব্যাখ্যা:

  • autoread: বাইরে থেকে পরিবর্তিত হয়ে ফাইলটি পড়বে (তবে এটি নিজে থেকে কাজ করে না, কোনও অভ্যন্তরীণ টাইমার বা এর মতো কিছু নেই It :!
  • CursorHold * checktime: যখন কার্সার দ্বারা নির্ধারিত সময়ের জন্য ব্যবহারকারী দ্বারা সরানো না হয় updatetime(যা ডিফল্টরূপে 4000 মিলিয়ন সেকেন্ড হয়) checktimeকার্যকর হয়, যা ফাইলের বাইরে থেকে পরিবর্তনগুলি পরীক্ষা করে
  • call feedkeys("lh"): কার্সারটি একবার, ডান এবং পিছনে বামে সরানো হয়। এবং তারপরে কিছুই ঘটে না (... যার অর্থ, এটি CursorHoldট্রিগার হয়েছে, যার অর্থ আমাদের একটি লুপ রয়েছে )

স্ক্রোলিংটি ব্যবহার করার সময় থামানোর জন্য call feedkeys("G"), এক্সিকিউট করুন :set noautoread- এখন ভিআইএম বলবে, ফাইলটি পরিবর্তন হয়েছিল উত্তরগুলি জিজ্ঞাসা করুন যে কেউ পরিবর্তনগুলি পড়তে চায় কিনা)

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

* এই উত্তর থেকে ( ফানহাইকিউআং এর উত্তর এবং ফ্লুকাসের একটি মন্তব্যে প্রত্যাহার )


0

সম্পাদনা: আমি ক্ষমা চাইছি, সম্পূর্ণভাবে বাইপাস করে দিয়েছি যে আপনি ইতিমধ্যে এটি চেষ্টা করেছেন।

আপনি টেল বান্ডিল প্লাগইনটি ব্যবহার করে দেখতে পারেন , আমার মনে হয় আপনি যা খুঁজছেন তা করা উচিত।

ইনস্টল করতে, Vim সহ লেজ -৩.০.vba খুলুন এবং সম্পাদন করুন:

:so %

পুনরায় আরম্ভ করুন এবং আপনার যেমন ভিএম এর মধ্যে থেকে কোনও ফাইল টেল করতে সক্ষম হওয়া উচিত:

:Tail /path/to/file

0

শুধুমাত্র ভিআইএম 8.0+ এর জন্য তারা টাইমার প্রবর্তন করেছে, যাতে আপনি লেজ ফাংশন অনুকরণ করতে একটি টাইমার ব্যবহার করতে পারেন, এটি আমার অভিজ্ঞতাতে বেশ কার্যকরভাবে কাজ করে।

লেজ বন্ধ করার জন্য আমি F6 কী ম্যাপ করেছি এবং লেজ বন্ধ করতে F7 কী ম্যাপ করেছি, আপনি নীচের কমান্ডগুলিতে কাস্টমাইজ করতে পারেন, ওয়ার্ডস অফ কৌতনের জন্য নীচে আমার বিভাগটি দেখুন।

নিম্নলিখিত চালান

exe ":function! Tail(timer) \n :exe 'normal :e!\<ENTER>G' \n endfunction"
map <F6> :exe timer_start(2000, 'Tail', {'repeat':-1})<CR> 
map <F7> :exe timer_stopall()<CR>

আপনি উপরের কমান্ডগুলিকে ভিএমআরসি-র অংশও বানাতে পারেন যাতে আপনার সর্বদা সেগুলি থাকে।

সাবধানতার কিছু শব্দ:

  • আমি ধরে নিয়েছি আপনার অন্য কোনও টাইমার নেই, তাই টাইমার_স্টপাল () আসলে কার্যকরভাবে সমস্ত টাইমার বন্ধ করে দেবে। টাইমার_স্টার্ট চলাকালীন আইডি পেতে আপনি এটি আরও কিছুটা সংশোধন করতে পারেন এবং এটি ধরে রেখেছিলেন ইত্যাদি etc তবে এটি আমার কাছে কিছুটা কাজ বলে মনে হয়েছিল এবং আমি ধরে নিয়েছি বেশিরভাগ লোকেরা টাইমার ব্যবহার করবেন না।
  • এটি টেইল মোডে থাকাকালীন, আমি অত্যন্ত পরামর্শ দিচ্ছি যে আপনি কোনও কমান্ড চালানোর চেষ্টা করবেন না, এটি সাধারণত ভিম দৃষ্টান্তটি ক্র্যাশ করে, সুতরাং আপনি সম্পাদনা মোডে ফিরে যাওয়ার সিদ্ধান্ত নেওয়ার আগে টেল অফ অফ টেল (F7) ব্যবহার করুন, এটি কেবলমাত্র শক্ত লগগুলি দেখার জন্য

-1

ভিমের মধ্যে থেকে, কার্যকর করুন:

!tail -f 

এটি বৈমকে সাময়িক বরখাস্ত করবে যখন কাঁটাচাষিত শিশুটি tail -fবর্তমান বাফারে মৃত্যুদণ্ড কার্যকর করবে। হিট Ctrl-Cআপনাকে ভিমে বাফারে ফিরিয়ে দেয়।


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