আপডেট 2015-06-25 :
- আমি "শেল" পদ্ধতিটি স্ক্র্যাপ করে ফেলেছি, কারণ এটি খুব অকার্যকর ছিল। এটি সন্নিবেশ মোড এবং বাম জোম্বি প্রক্রিয়াগুলি বন্ধ করে দিয়েছে। এ এই পোস্ট এর পুনর্বিবেচনা ইতিহাস আপনি কি সত্যিই যাহাই হউক না কেন এটা দেখতে চাই হয়।
- আমি এর থেকে একটি প্লাগইন তৈরি করেছি: অটো_আউটোরাদ.ভিম । এই মুহুর্তে, এটি কার্যকরভাবে নীচের কোডের মতো একই, তবে আমি আপনাকে সুপারিশ করব প্লাগইনটি ব্যবহার করার কারণে এটি আপডেটগুলি পেতে পারে।
কি করে autoread
?
এই প্রশ্নের উত্তর দেওয়ার জন্য, আমাদের প্রথমে বুঝতে হবে autoread
বিকল্পটি কী করে এবং আরও গুরুত্বপূর্ণভাবে, এটি কী করে না ।
দুর্ভাগ্যক্রমে :help 'autoread'
এই সম্পর্কে অনেক তথ্য নেই, এটি কেবল "একটি ফাইল ভিমের বাইরে পরিবর্তন করা হয়েছে বলে সনাক্ত করা হয়েছে" বলেছে । উইম কীভাবে সনাক্ত করতে পারে যে একটি ফাইল পরিবর্তিত হয়েছে? নির্দিষ্ট কিছু ক্রিয়াকলাপে, ভিম ফাইলটির পরিবর্তনের সময় পরীক্ষা করে।
কখন:
:checktime
ব্যবহৃত হয়;
- একটি বাফার প্রবেশ করা হয়েছে;
:diffupdate
ব্যবহৃত হয়;
:e
ইতিমধ্যে একটি বাফার রয়েছে এমন একটি ফাইলের জন্য জারি করা হয়;
- এর সাথে একটি বাহ্যিক কমান্ড কার্যকর করা
!
;
- ফোরগ্রাউন্ড ফিরে (
^Z
, fg
, শেল কাজ নিয়ন্ত্রণ আছে শুধুমাত্র যদি);
gVim এর জন্য, এটিও করা হয় যখন:
- "ডান ক্লিক" মেনু বন্ধ (হয় কিছু নির্বাচন করে, বা কেবল এটি বন্ধ করে);
- ফোকাস পরিবর্তন করা হয়েছে (এটি আপনি ইতিমধ্যে লক্ষ্য করেছেন);
- ফাইল ব্রাউজারগুলির ডায়লগটি বন্ধ করে যা আপনি মেনু থেকে "ফাইল -> খুলুন", "ফাইল -> সংরক্ষণ করুন" ব্যবহার করেন (পাশাপাশি কিছু অন্যান্য স্থান) ব্যবহার করে।
আমি ভিএম উত্স থেকে এই কলটি buf_check_timestamp()
, check_timestamps()
ফাংশন এবং যেখানে
need_check_timestamps
সেট করা আছে সেগুলিতে সমস্ত কল সনাক্ত করে তথ্য সংগ্রহ করেছি
TRUE
।
আমি কিছু ইভেন্ট মিস করতে পারি, তবে মনে রাখার মূল বিষয়টি হ'ল ভিম কেবলমাত্র ফাইলটিকে খুব সীমাবদ্ধ সংস্থায় সংশোধন করা হয়েছে কিনা তা পরীক্ষা করে । এটি অবশ্যই কখনও এন সেকেন্ডের পরিবর্তনের জন্য ফাইলটিকে "পোল" দেয় না , যা মূলত আপনি যা করছেন।
সুতরাং, আপনার প্রয়োজনের জন্য, set autoread
যথেষ্ট নয়।
পাইথন ব্যবহার করা
এটি ব্যাকগ্রাউন্ডে চালুর জন্য পাইথন থ্রেডকে শিডিউল :checktime
করে , এটি প্রতি এন সেকেন্ডে চলবে
। যদি autoread
হয় সক্রিয় , এই ডিস্ক থেকে বাফার পুনরায় লোড করা হবে, অন্য এটি শুধু সতর্ক হবে।
এটির জন্য ভিমে থাকা +python
বা +python3
থাকা দরকার :version
। এটি সমস্ত প্ল্যাটফর্মগুলিতে (উইন্ডোজ সহ) কাজ করা উচিত।
fun! AutoreadPython()
python << EOF
import time, vim
try: import thread
except ImportError: import _thread as thread # Py3
def autoread():
vim.command('checktime') # Run the 'checktime' command
vim.command('redraw') # Actually update the display
def autoread_loop():
while True:
time.sleep(1)
autoread()
thread.start_new_thread(autoread_loop, ())
EOF
endfun
আপনি এটি ব্যবহার করে এটি শুরু করতে পারেন :call AutoreadPython()
; আপনি অবশ্যই এটি একটি অটোকএমডিতে করতে পারেন; উদাহরণ স্বরূপ:
autocmd *.c call AutoreadPython()
উত্তরভাষ
আসলে আরও অনেকগুলি পদ্ধতি রয়েছে, উদাহরণস্বরূপ, আপনি কোনও সরঞ্জাম ব্যবহার করতে পারেন যেমন
entr
পাইথন inotify
বা gamin
মডিউল পরিবর্তনের জন্য কোনও ফাইল নিরীক্ষণের জন্য, :checktime
সমস্ত বাফারগুলি পরীক্ষা করে যদি এটির কোনও যুক্তি না দেওয়া হয় তবে এটি কেবলমাত্র একটি একক বাফার পরীক্ষা করে বা আরও উন্নত হতে পারে একটি নির্দিষ্ট ফাইল।
যাইহোক, এই উত্তরটি ইতিমধ্যে বরং দীর্ঘ :-) এই পদ্ধতিটি (আশাকরি!) বেশিরভাগ পরিস্থিতিতে সঠিকভাবে কাজ করা উচিত, বা আপনার দৃশ্যের সাথে সহজেই খাপ খাইয়ে নেওয়া উচিত।
গীত। আমি রুবি ব্যবহার করার চেষ্টাও করেছি, তবে দুর্ভাগ্যক্রমে রুবি থ্রেডগুলি (ব্যবহার করে Thread
) পাইথনের মতো পটভূমিতে চলতে পারে না, তাই আমি এটি কাজ করতে সক্ষম হইনি (যদিও অন্য কোনও উপায় আছে, যদিও?)
CursorHold
অনুষ্ঠানের কথা বলছেন ? যদি ভিমের ফোকাস না থাকে তবে এটি প্রতি এন সেকেন্ডে ট্রিগার করা উচিত।