আমি কীভাবে বর্তমান ফাইলটি পুনরায় লোড করব?


145

বেশিরভাগ সময় আমি সংস্করণ নিয়ন্ত্রিত ফাইলগুলির সাথে কাজ করি, তাই তাদেরকে ভিমের বাইরে পরিবর্তন করা সম্ভব।

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


" Compare buffer with saved version nnoremap gd :DiffSaved<CR>
টম হেল

আপনি যদি ভিম-ফ্যাক ইনস্টল করেন তবে আপনি সেখানে একটি অফলাইন উত্তর পেতে পারেন: :h vim-faqএবং অনুসন্ধান করুন /reload। মুখস্থ করা ট্যাগ হার্ড :h faq-5.8
হটস্কে

উত্তর:


172

আপনি যে আদেশটি চান তা হ'ল :e(সংক্ষিপ্ত :edit)। আপনি যদি :edit!এটি ব্যবহার করেন তবে স্থানীয় পরিবর্তনগুলি এবং পুনরায় লোড বাতিল হবে।

আপনি set autoreadআপনার ভিএমআরসি-র মাধ্যমে স্বয়ংক্রিয়ভাবে এটি করতে পারেন।


5
সম্পর্কিত উত্তর এবং সমাধানের জন্য এই উত্তরটি দেখুন autoread
টম হ্যালে

4
সমস্ত বাফারদের জন্য এটি করতে :bufdo :eবা ব্যবহার করুন:bufdo :e!
হারুন এইচ।

1
@AaronH। এটার জন্য ধন্যবাদ! আমি সাধারণত একসাথে কয়েকশো বাফার খোলা থাকি এবং যখন শাখাগুলি স্যুইচ করি, আমি সাধারণত কেবলমাত্র ভিএম বন্ধ করি এবং নতুন সামগ্রীগুলির সাথে সমস্ত বাফার রিফ্রেশ করতে পুনরায় চালু করি। এটি একটি বড় টাইমসভার হবে!
g19fanatic

1
@AaronH। দ্বিতীয়টি :alচ্ছিক: :bufdo eএকই কাজ করবে।
জোআল

19

অনেক ক্ষেত্রেই, এই উত্তরটির ব্যাখ্যা set autoreadহিসাবে কাজ করবে না :

অটোর্যাড ফাইলটি পুনরায় লোড করে না যদি আপনি বাহ্যিক কমান্ড চালানোর মতো কিছু না করেন (যেমন !lsবা !shইত্যাদি)

ফোকাস ইভেন্টগুলি ট্রিগার করবে autoread, তবে এটি ব্যবহার না করা ক্যাপচার করা হবে না gvim। সুতরাং, যদি vimটার্মিনাল উইন্ডো বা tmux এর অভ্যন্তরে প্লেইন চলমান থাকে তবে vim-tmux-ધ્યાન-ইভেন্টগুলি ইনস্টল করুন ।

Tmux সংস্করণ> 1.9 এ, আপনাকে এতে যুক্ত করতে হবে .tmux.conf:

set -g focus-events on

অতিরিক্ত ধার্মিকতার জন্য, ভিমে ভিতরে থাকা অবস্থায় ভিতরে বাফারগুলি পরিবর্তন করার সময় আপনার নিম্নলিখিতটিতে নিম্নলিখিতটি যুক্ত করা vimrcট্রিগার করবে :autoread

au FocusGained,BufEnter * :checktime

বছরের পর বছর এটি আমাকে বিরক্ত করে চলেছে। সম্পূর্ণ সমাধানের জন্য ধন্যবাদ! 💯😄
নাথান লং

9

আপনি যদি কখনও ভিম ​​থেকে কোনও বাহ্যিক কমান্ড চালিয়ে থাকেন যা বর্তমান বাফারকে সংশোধন করে, আপনি লক্ষ্য করে থাকতে পারেন যে ডিস্কে পরিবর্তনগুলি করা হয়েছে বলে ফাইলটি আপনাকে পুনরায় লোড করার অনুরোধ জানায়। আপনি প্রকৃতপক্ষে :checktimeকমান্ডটি ব্যবহার করে এই প্রম্পটটি শুরু করতে পারেন ।


3

Https://github.com/djoshea/vim-autoread উন্নত করার জন্য দুর্দান্ত প্লাগইনautoread

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


ভাই স্ট্যাক এক্সচেঞ্জে আপনাকে স্বাগতম। এটি প্রায় একটি লিঙ্ক-শুধুমাত্র উত্তর। প্লাগইনটি বর্ণনা করে আপনি এর উপরে উন্নতি করতে পারেন (উদাহরণস্বরূপ এটি কী করে?
ওপির

0

আমার কোনও ফাইলের বিষয়বস্তু দেখার সমস্যা ছিল, ফাইলটি বাহ্যিকভাবে আপডেট করুন, পরিবর্তিত ফাইলটি প্রদর্শন করুন এবং প্রয়োজনে এটি সম্পাদনা করার বিকল্প আছে have আমি এই উত্তরটি দিয়ে অনুপ্রাণিত হয়ে ভিএম সার্ভার / রিমোট কমান্ড লাইন বিকল্পগুলি দিয়ে এটি সমাধান করেছি ।


নিম্নলিখিত কমান্ডগুলির সাহায্যে একটি ফাইল বাহ্যিক কমান্ডের মাধ্যমে পুনরায় লোড করা যায়। প্রথমে সার্ভারের উদাহরণটি শুরু করার সময়, ভিমের সাথে প্রশ্নযুক্ত ফাইলটি খুলুন।

vim --servername JABBERWOCKY /tmp/alice.log

ফাইল জেনে নিই বাইরে পরিবর্তন করা হয়েছে, একটি দ্বারা যেমন echo "Curiouser and curiouser" >> /tmp/alice.log। যখন প্রয়োজন হয়, ফাইলটি পুনরায় লোড করার জন্য সার্ভারের দৃষ্টিতে একটি আদেশ পাঠান। এই আদেশটি দ্রুত শেষ হবে এবং কোনও নতুন সম্পাদককে স্প্যান করবে না।

vim --servername JABBERWOCKY --remote-send ":e<CR>"

যদি খোলা ফাইলটি ভিমে এবং বাহ্যিকভাবে পরিবর্তিত হয় তবে পুনরায় লোডের সময় একটি বিরোধ হবে (একটি সতর্কতা বার্তা উপস্থিত হবে)। সেক্ষেত্রে একটি সিদ্ধান্ত নিতে হবে: এটিকে এটি দিয়ে ছেড়ে যান এবং ভিমে পরিবর্তন রাখুন, বা স্থানীয় পরিবর্তনগুলি বাতিল করুন এবং পুনরায় লোড করার জন্য বাধ্য করুন


--remote-sendউপরের কমান্ডটির জন্য ম্যানুয়াল পুনরায় লোড করা প্রয়োজন। তবে, কমান্ডটি একটি সাধারণ লুপের সাথে বাশের for/ whileঅথবা লিনাক্স / ইউনিক্সে একটি হ্যাকি ওয়ান-লাইনার ব্যবহার করে বাঁধা যেতে পারে :

watch -n 1 'vim --servername JABBERWOCKY --remote-send ":e<CR>"'

পরীক্ষিত না হলেও, আমি নিশ্চিত যে পাওয়ারশেলের মধ্যেও এরকম কিছু উপলব্ধি করা যেতে পারে।

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

echo /tmp/alice.log | entr vim --servername JABBERWOCKY --remote-send ":e<CR>"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.