vi (এম) এ খোলা ফাইলের পরিবর্তিত সামগ্রী রিফ্রেশ করুন


362

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



মোড়ানো: এখন পর্যন্ত সমস্ত উত্তর "পুশ" শৈলীর পরিবর্তে "পোল" এর। এটি, অন্যান্য সফ্টওয়্যারগুলির অনুরূপ বৈশিষ্ট্যগুলির দ্বারা সম্পন্ন যেমন বাহ্যিক ফাইল পরিবর্তনের ইভেন্টটি পাওয়ার পরিবর্তে, এই উত্তরগুলি ম্যানুয়ালি বা কোনও ব্যবহারকারী ক্রিয়া বা টাইমার দ্বারা চালিত ফাইল পরিবর্তনটিকে সক্রিয়ভাবে ভোটদানের উপর নির্ভর করে। শেষ ফলাফলটি আপনি তাত্ক্ষণিকভাবে স্ক্রিনে রিফ্রেশ দেখতে পাবেন না।
পেঙ্গে জেং

উত্তর:


464

আপনি :editবর্তমান ফাইলটি পুনরায় লোড করতে কোনও ফাইলের নাম উল্লেখ না করে কমান্ডটি ব্যবহার করতে পারেন । আপনি যদি ফাইলটিতে পরিবর্তন করে থাকেন তবে আপনি :edit!বর্তমান ফাইলটি পুনরায় লোড করার জন্য চাপ প্রয়োগ করতে পারেন (আপনি নিজের পরিবর্তনগুলি হারাবেন)।

কমান্ড :editসংক্ষেপে সংক্ষিপ্ত করা যেতে পারে :e। এইভাবে ফোর্স-এডিট করা যায়:e!


2
দ্য "!" আমাকে ট্রিপ করছিল, তবে এখন তা পরিষ্কার হয়ে গেছে।
twan163

107
দ্রষ্টব্য: যা সাধারণত করা সংক্ষিপ্ত হচ্ছে :e!
স্টাফেন চেজেলাস

31
@ স্টাফেনচাজেলাস: হ্যাঁ, এটি সঠিক: :) @ টুইন ১1৩: এর পরিবর্তে :editএবং :edit!আপনি যথাক্রমে :eএবং ব্যবহার করতে পারেন :e!
থিশি

11
হ্যাঁ এবং না, পরিবর্তনগুলি হারাবেন। গুরুতরভাবে, আপনি এখনও uএনডো করতে পারেন :e!
অঙ্কিত

5
এছাড়াও, আপনি যদি আপনার সমস্ত বাফারগুলি পুনরায় লোড করতে চান তবে চালান::bufdo e
পিকেআউট

193

ম্যানুয়ালি দিয়ে ফাইলটি রিফ্রেশ করার পাশাপাশি আপনি এটিতে রাখতে :editপারেন~/.vimrc

:set autoread

ভিম দ্বারা সম্পাদিত হয়নি এমন কোনও ফাইল স্বয়ংক্রিয়ভাবে রিফ্রেশ করতে। এছাড়াও দেখুন :checktime


2
ক্রেতা সাবধান - আপনি নতুন কোডে কাজ করছেন এবং git pullসচেতন হন আপনি অনিচ্ছাকৃতভাবে পর্দায় আপনার সুরক্ষিত পরিবর্তনগুলি হারাতে পারেন।
আজাতর

5
@ টসস্টার না, ভিম কেবল অপরিবর্তিত বাফারগুলিকে রিফ্রেশ করবে । পরিবর্তনের ক্ষেত্রে, এখনও একটি প্রশ্ন থাকবে: রাখুন, বা লোড করুন?
ইনগো কারকাত

10
এনবি অটোরেড হ'ল স্বয়ংক্রিয়ভাবে কাজ করে না । আপনার হয় হয় ব্যবহার করতে হবে gvim, বা বহিরাগত কমান্ড চালাতে হবে।
স্পারহাক

3
যারা tmux এর ভিতরে ভিএম ব্যবহার করে তারা github.com/tmux-plugins/vim-tmux-focus-events ব্যবহার করে ফোকাস ইভেন্টগুলি পেতে পারে । অন্যথায় অটোরেড টার্মিনালে সহায়তা করবে না যদি আপনি কোনওভাবে কল না করেন:checktime
কার্ল বার্টেল 3'17

3
autoreadকার্সারটি চলন্ত বন্ধ হওয়ার পরে এক্স সেকেন্ডে স্বয়ংক্রিয়ভাবে ট্রিগার হতে পারে, এই উত্তরটি দেখুন
টম হ্যালে

57

টি এল; ডিআর

আপনার জীবনকে আরও সুন্দর করতে যোগ করতে লাইনগুলির Wrap-upশিরোনামে যান vimrc

ম্যানুয়ালি

চালান :checktime

ভিমের বাইরে কোনও বাফার পরিবর্তন করা হয়েছে কিনা তা পরীক্ষা করে দেখুন। যদি আপনি কোনও ফাইলের দুটি সংস্করণ দিয়ে শেষ করেন তবে এটি আপনাকে পরীক্ষা করে এবং সতর্ক করে।

স্বয়ংক্রিয়ভাবে

পরিবর্তনগুলি স্বয়ংক্রিয়ভাবে লোড করতে, আপনার এতে যুক্ত করুন vimrc:

set autoread

যখন কোনও ফাইল ভিমের বাইরে পরিবর্তন করা হয়েছে এবং এটি ভিমের অভ্যন্তরে পরিবর্তন করা হয়নি, তা স্বয়ংক্রিয়ভাবে আবার এটি পড়ুন। ফাইলটি মোছা হয়ে গেলে এটি করা হয় না।

এই উত্তরটি একটি সতর্কতা যুক্ত করেছে:

অটোর্যাড ফাইলটি পুনরায় লোড করে না যদি আপনি বাহ্যিক কমান্ড চালানোর মতো কিছু না করেন (যেমন !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 করার জন্য এরিকবিএসচুলজকে ধন্যবাদ ।


2
চমৎকার পোস্ট! সেগুলো যেখানে এই ডিফল্ট আচরণ হওয়া উচিত এক মত অনুভূত
JonnyRaa
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.