ডিস্কে পরিবর্তন হওয়ার সাথে সাথে ভিআইএম-এ কোনও ফাইল অটো-লোড হচ্ছে


33

ধরে নিচ্ছি যে ভিআইএম বাফারটিতে কোনও ফাইলের সংরক্ষণে থাকা পরিবর্তন নেই, আমি যদি ফাইলটি ডিস্কে পরিবর্তিত হয় তবে এটি স্বয়ংক্রিয়ভাবে পুনরায় লোড করা চাই। এর জন্য সর্বাধিক ঘন ঘন ব্যবহারের কেসটি হ'ল আমি যখন ওয়ার্কিং কপি আপডেট করি যেখানে ফাইলটি থাকে।

আমি কীভাবে এটি অর্জন করতে পারি?


আমি মনে করি এটি আপনার অর্থ যা বোঝায় তবে আমার নির্দিষ্ট ব্যবহারের ক্ষেত্রে আমি যখন কোনও অন্য গিট শাখা পরীক্ষা করে দেখি বা প্রতিশ্রুতিবদ্ধ করি তখন আমি ভিএম ফাইলটি পুনরায় লোড করতে চাই।
নাথান লং

উত্তর:


32

আপনার ~/.vimrc:

set autoread

9
সাধারণত autoreadকেবলমাত্র বাহ্যিক কমান্ড কার্যকর করার পরে ট্রিগার করা হবে। এই উত্তরের সমাধানগুলির বিশদ রয়েছে।
টম হ্যালে

এটি কার্যকর হয় না এমন একটি উত্তরের উত্তরের জন্য @ টমহেল লিঙ্কটি অনুসরণ করুন
জনিআআআআআআআআ

11

এটিই আমার পক্ষে কাজ করেছিল

set autoread                                                                                                                                                                                    
au CursorHold * checktime  

প্রথম লাইন নিজেই যথেষ্ট ছিল না। আপনি রাখতে পারেন.vimrc

ফান হাই কোয়াং এর কৃতিত্ব


স্বতঃসিএমডি করা উচিত নয় - চেকটাইমটি একই সাথে কার্সারহোল্ড ইভেন্টটি ট্রিগার হওয়ার সাথে সাথে অভ্যন্তরীণভাবে চলার কথা। অন্য কথায়, আপনি স্রেফ ভিমকে দ্বিতীয় চেকটাইম করে দিচ্ছেন।
হেপাটাইতে

আমার জন্য এটি প্রয়োজনীয়। প্রচুর গবেষণার পরে আমি খুঁজে পেয়েছি সেরা সমাধান। @ হেপটাইট, আপনার বক্তব্যটির জন্য অধ্যায় এবং শ্লোক কি আছে?
টম হেল

1
@ টমহেল আমি ভিম ডক্স পর্যালোচনা করেছি এবং এটি স্পষ্টভাবে বলতে পারে না, যতদূর আমি বলতে পারি, তবে " :help timestamp" মনে হবে যে আমিই একজন ভুলের মধ্যে আছি এবং ভিম কেবল নির্দিষ্ট ইভেন্টগুলির উপর চেক সঞ্চালন করে, সুতরাং অটোকিমডি এটি আরও ঘন ঘন পরীক্ষা করার কারণ হতে পারে।
হেপাটাইতে

5

অটোরেড সঠিকভাবে কাজ করে না। নিম্নলিখিতটি আমার পক্ষে কাজ করে:

আপনাকে প্রথমে এখান থেকে স্ক্রিপ্ট ইনস্টল করতে হবে ।

আমি ঠিক মত সেটআপ ফাংশন কল করে সেরা ফলাফল পেয়েছি।

let autoreadargs={'autoread':1} 
execute WatchForChanges("*",autoreadargs) 

এর কারণটি হ'ল আমি আইপিথন / স্ক্রিন / ভিএম সেটআপ চালাতে চাই।

আপনি এটিকে সহজেই দেখার বর্ধিত সংস্করণে রূপান্তর করতে পারেন।

প্রক্রিয়া স্ক্রিপ্ট ..

mkdir -p ~/bin
cat <<`OUT` > ~/bin/vimviewer
#!/usr/bin/env sh
exec vim -n --cmd "source /home/bryan/.vim/.vimrc.watchforchanges | let autoreadargs={'autoread':1} | execute WatchForChanges('*',autoreadargs)" $@
`OUT`

chmod 755 ~/bin/vimviewer
vimview test.txt

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

3

ভিআইএম-অটোরেড প্লাগইন এখনও পর্যন্ত আমার জন্য কাজ করেছে:

তেজ-autoread

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


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

@ বুর্গি আমি প্লাগইন বিবরণ যুক্ত করেছি যা ব্যাখ্যা করে যে এটি কীভাবে সমস্যার সমাধান করে।
ওয়াজটেক ক্রুসজেউস্কি

আমি চেষ্টা করেছিলাম তবে jকার্যকর আপডেট দেখতে আমাকে নেভিগেশন কমান্ড টাইপ করতে হবে (লাইক )। আমি এই সম্পর্কে এখানে একটি সমস্যা তৈরি করেছি: github.com/djoshea/vim-autoread/issues/3
মার্টিন

3

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

যখন প্রয়োজন হয় তখন প্রাক্তন (whithin vim) থেকে কেউ এই অনেলাইনারটি চালাতে পারেন (বা লগ-ফাইলগুলি যখন খোলা হয় তার জন্য প্রতিটি কমান্ড ভিআইএমআরসিতে রাখুন))

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

ব্যাখ্যা:
- অটোরেড : বাইরের থেকে পরিবর্তিত হয়ে ফাইলটি পড়ে (তবে এটি নিজে থেকে কাজ করে না, কোনও অভ্যন্তরীণ টাইমার বা এর মতো কিছু নেই। এটি কেবল তখনই ফাইলটি পড়বে যখন ভিআইএম কোনও কমান্ডের মতো প্রাক্তন কমান্ডের মতো করে :!
- কার্সারহোল্ড * চেকটাইম : যখন 'আপডেটটাইম' (যা ডিফল্টরূপে 4000 মিলি সেকেন্ড) নির্দিষ্ট সময়ের জন্য ব্যবহারকারীর দ্বারা কার্সারটি সরানো হয় না তখন চেকটাইম কার্যকর করা হয়, যা ফাইলের বাইরে থেকে পরিবর্তনগুলি পরীক্ষা করে
- কল ফিডকি ("lh") : কার্সারটি একবার, ডান এবং পিছনে বামে সরানো হয় এবং তারপরে কিছুই হয় না (... যার অর্থ, কার্সারহোল্ডটি ট্রিগার হয়েছে, যার অর্থ আমাদের একটি লুপ রয়েছে )


lhকার্সার লাইনটির শেষ অবস্থানে থাকলে, কিছু lhকরবে না তার অবস্থান পরিবর্তন করবে।
মাহমুদ আল-কুদসি

ঠিক ঠিক, বিন্দু thats। ন্যূনতম মিথস্ক্রিয়া বা ফাইলের পরিবর্তনের সাথে ফাইলটি পুনরায় লোড করা হয়। আপনি চাইলে আপনি সর্বশেষ বা প্রথম লাইনে ঝাঁপিয়ে পড়তে পারেন (কেবলমাত্র জিএইচ বা জি দিয়ে এলএইচ প্রতিস্থাপন করুন), তবে এখানে লক্ষ্যটি হ'ল কেবল ভিএম-তে ফাইলটি পুনরায় লোড করা এবং এই ওয়ান-লাইনারের দ্বারা কী করা হয়েছে তা আর কিছুই নয়। আপনি এখানে কি করতে চান?
eli

@ মাহমুদআল-কুদসি ... এর অর্থ, "এলএইচ" সবেমাত্র কার্সারহোল্ড - ক্রিয়াকলাপটি প্রকাশ করেছে (আমি এটি ব্যাখ্যায় উল্লেখ করেছি), যা আবার অটোরেডকে ট্রিগার করে
এলি

1

কিছু তালিকাভুক্ত প্লাগিন হয় এখানে যে তেজ সংস্করণটি উপর নির্ভর করে শক্তি হবে।

আরেকটি পদ্ধতি হ'ল checktimeবাহ্যিক প্রক্রিয়া থেকে পর্যায়ক্রমে কমান্ডটি ভিমে প্রেরণ করা । এটি করার জন্য এখানে একটি শেলজেএস স্ক্রিপ্ট রয়েছে (প্রয়োজন shelljs-plugin-sleep, নিওভিম এবং nvr)

while (true) {
  sleep(15);
  var servernames = exec('nvr --serverlist').trim().split('\n');
  if (!servernames.length || !servernames[0]) {
    continue;
  }
  servernames.forEach(
    (sn) => exec(`nvr -c "checktime" --servername ${sn}`) );
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.