আমার একটি কনফিগার ফাইল রয়েছে যা আমি ভিএম-তে খোলা রাখি, তবে এটি কখনও কখনও ডিস্কে পরিবর্তিত হয়, টার্মিনালে এই পরিবর্তনগুলি প্রতিফলিত না হয়ে। ফাইলটি বন্ধ না করে এবং পুনরায় খোলা না রেখে আমি কী পর্দার সামগ্রীটি রিফ্রেশ করতে পারি? যদি তাই হয়, কিভাবে?
আমার একটি কনফিগার ফাইল রয়েছে যা আমি ভিএম-তে খোলা রাখি, তবে এটি কখনও কখনও ডিস্কে পরিবর্তিত হয়, টার্মিনালে এই পরিবর্তনগুলি প্রতিফলিত না হয়ে। ফাইলটি বন্ধ না করে এবং পুনরায় খোলা না রেখে আমি কী পর্দার সামগ্রীটি রিফ্রেশ করতে পারি? যদি তাই হয়, কিভাবে?
উত্তর:
আপনি :editবর্তমান ফাইলটি পুনরায় লোড করতে কোনও ফাইলের নাম উল্লেখ না করে কমান্ডটি ব্যবহার করতে পারেন । আপনি যদি ফাইলটিতে পরিবর্তন করে থাকেন তবে আপনি :edit!বর্তমান ফাইলটি পুনরায় লোড করার জন্য চাপ প্রয়োগ করতে পারেন
(আপনি নিজের পরিবর্তনগুলি হারাবেন)।
কমান্ড :editসংক্ষেপে সংক্ষিপ্ত করা যেতে পারে :e। এইভাবে ফোর্স-এডিট করা যায়:e!
:e!।
:editএবং :edit!আপনি যথাক্রমে :eএবং ব্যবহার করতে পারেন :e!।
uএনডো করতে পারেন :e!।
:bufdo e
ম্যানুয়ালি দিয়ে ফাইলটি রিফ্রেশ করার পাশাপাশি আপনি এটিতে রাখতে :editপারেন~/.vimrc
:set autoread
ভিম দ্বারা সম্পাদিত হয়নি এমন কোনও ফাইল স্বয়ংক্রিয়ভাবে রিফ্রেশ করতে। এছাড়াও দেখুন :checktime।
git pullসচেতন হন আপনি অনিচ্ছাকৃতভাবে পর্দায় আপনার সুরক্ষিত পরিবর্তনগুলি হারাতে পারেন।
gvim, বা বহিরাগত কমান্ড চালাতে হবে।
:checktime
autoreadকার্সারটি চলন্ত বন্ধ হওয়ার পরে এক্স সেকেন্ডে স্বয়ংক্রিয়ভাবে ট্রিগার হতে পারে, এই উত্তরটি দেখুন ।
আপনার জীবনকে আরও সুন্দর করতে যোগ করতে লাইনগুলির Wrap-upশিরোনামে যান vimrc।
চালান :checktime
ভিমের বাইরে কোনও বাফার পরিবর্তন করা হয়েছে কিনা তা পরীক্ষা করে দেখুন। যদি আপনি কোনও ফাইলের দুটি সংস্করণ দিয়ে শেষ করেন তবে এটি আপনাকে পরীক্ষা করে এবং সতর্ক করে।
পরিবর্তনগুলি স্বয়ংক্রিয়ভাবে লোড করতে, আপনার এতে যুক্ত করুন vimrc:
যখন কোনও ফাইল ভিমের বাইরে পরিবর্তন করা হয়েছে এবং এটি ভিমের অভ্যন্তরে পরিবর্তন করা হয়নি, তা স্বয়ংক্রিয়ভাবে আবার এটি পড়ুন। ফাইলটি মোছা হয়ে গেলে এটি করা হয় না।
এই উত্তরটি একটি সতর্কতা যুক্ত করেছে:
অটোর্যাড ফাইলটি পুনরায় লোড করে না যদি আপনি বাহ্যিক কমান্ড চালানোর মতো কিছু না করেন (যেমন
!lsবা!shইত্যাদি)
সমাধানের জন্য পড়ুন।
আপনার যুক্ত করুন vimrc:
au CursorHold,CursorHoldI * checktime
ডিফল্টরূপে, কার্সার 4 সেকেন্ডের জন্য স্থির থাকার পরেও কার্সারহোল্ড ট্রিগার হয় এবং আপডেটটাইমের মাধ্যমে কনফিগার করা যায় ।
ভিএম এর ভিতরে থাকার সময় বাফারগুলি পরিবর্তন করার সময় আপনার vimrcট্রিগার করতে নিম্নলিখিতগুলিতে যুক্ত করুন :autoread
au FocusGained,BufEnter * :checktime
আছে FocusGained(দেখুন উপরে) প্লেইন তেজ কাজ, একটি টার্মিনাল এমুলেটর (xterm, tmux, ইত্যাদি) ভিতরে ইনস্টল প্লাগইন:
তেজ-tmux-ফোকাস-ঘটনা
Tmux সংস্করণ> 1.9 এ, আপনাকে এতে যুক্ত করতে হবে .tmux.conf:
set -g focus-events on
autoreadট্রিগারগুলি যখন সম্ভব তখনও বিজ্ঞপ্তি ।
vimrcউপরের সমস্তটি বাস্তবায়নের জন্য আমার লাইনগুলি এখানে রয়েছে :
" Triger `autoread` when files changes on disk
" https://unix.stackexchange.com/questions/149209/refresh-changed-content-of-file-opened-in-vim/383044#383044
" https://vi.stackexchange.com/questions/13692/prevent-focusgained-autocmd-running-in-command-line-editing-mode
autocmd FocusGained,BufEnter,CursorHold,CursorHoldI * if mode() != 'c' | checktime | endif
" Notification after file change
" https://vi.stackexchange.com/questions/13091/autocmd-event-for-autoread
autocmd FileChangedShellPost *
\ echohl WarningMsg | echo "File changed on disk. Buffer reloaded." | echohl None
আমাকে সঠিক দিকে নির্দেশau CursorHold করার জন্য এরিকবিএসচুলজকে ধন্যবাদ ।