ভিমে হাইলাইট করা পূর্বাবস্থা


12

আমি স্পেসম্যাকস ডিফল্ট কনফিগের মতো ভিমে হাইলাইটেড পূর্বাবস্থায় ফিরে যাওয়ার চেষ্টা করছি। কখনও কখনও যখন আমি দ্রুত পূর্বাবস্থায় ফিরে যেতে চাই তখন আমি বুঝতে পারি না কী পরিবর্তন হয়েছে কারণ এটি তাত্ক্ষণিক। তাই কোনও প্রেসটি পূর্বাবস্থায় ফেরা হলে আমি এ জাতীয় কিছু পাওয়ার চেষ্টা করছি:

হাইলাইট করা পূর্বাবস্থা

কারও ধারণা আছে কীভাবে এটি ভিমে করবেন?

(আমার কাছে ইতিমধ্যে গুন্ডো প্লাগইন রয়েছে, আমি কেবল ডিফল্টটিকে আরও মসৃণ করতে চাই)

সম্পাদনা : অনডট্রি প্লাগইন কাজ করে ( গুন্ডো পরিবর্তনগুলি হাইলাইট করে না), কেবল UndotreeToggleকমান্ডটি ব্যবহার করুন এবং ফাইলে সমস্ত ভবিষ্যতের পরিবর্তনগুলি হাইলাইট করা হবে।


চমৎকার ধারণা. আপনি এটির সাথে একটি হাইলাইট তৈরি করতে পারেন matchadd()তবে ফাইলটির কোন অংশটি পরিবর্তিত হয়েছে তার চেয়ে সামান্য কৌশলটি কাজ করছে।
জোয়েটউইডল

পূর্বাবস্থার পূর্বে কোনও অস্থায়ী বাফার / ফাইলে সংরক্ষণ করা, পরে পূর্বাবস্থার পরে ২ য় বাফার / ফাইলে সংরক্ষণ করা এবং পূর্ববর্তীগুলি সাফ করার পরে (বা এর রঙ পরিবর্তন করা) নতুন বিভাজনকে হাইলাইট করা। বড় ফাইলগুলির জন্য ধীর পেতে পারে।
ভ্যানল্যাসার

UndoTree আসলে পরিবর্তিত রেখাগুলি হাইলাইট করে তবে রিয়েলটাইমে এটি করে না। আমি মনে করি এটি জিএনইউ ডিফ ব্যবহার করে। শব্দের গ্রানুলারিটি প্রাপ্তি একটি অতিরিক্ত পদক্ষেপ হবে (উদাহরণস্বরূপ শব্দ বিরতিতে বিভক্ত লাইন , পৃথক, পুনঃসংযোগের রেখাগুলি)।
জোয়েটউইডল

এই প্লাগইনগুলি নিকটে আসে, তবে সেগুলি এখনও লাইন ভিত্তিক: স্মারগেল শেষ সংরক্ষণের পরে পরিবর্তিত লাইনগুলিকে হাইলাইট করতে পারে। পরিবর্তন প্লাগইন বামদিকে নর্দমার পরিবর্তিত রেখাগুলি (মুছে ফেলা সহ) চিহ্নিত করে।
জোয়েটউইল 22'15

1
@ জোয়েটউইডল, পরিবর্তন প্লাগইন সর্বশেষ পরিবর্তনের অঞ্চলটিকেও হাইলাইট করতে পারে
খ্রিস্টান ব্র্যাব্যান্ড

উত্তর:


6

নতুন সমাধান

আপনি :changesকমান্ডটি দিয়ে আপনার শেষ পরিবর্তনগুলি দেখতে পারেন । সুতরাং আপনি আপনার সাম্প্রতিকতম রেখা পরিবর্তনটি একটি রেইজেক্সের সাহায্যে ফিরিয়ে আনতে পারেন এবং তারপরে matchadd()@ জোয়েটউইডল এর ​​পরামর্শ অনুসারে লাইনটি প্রয়োগ করতে পারেন ।

কোডটি এখানে:

function! DiffWithPrevious()
  call clearmatches()
  redir => message
  silent changes
  redir END
  let line = matchstr(message, '\v\n\s{4}1[^0-9]*\zs\d+\ze')
  highlight TemporalDiff ctermbg=green guibg=green
  let m = matchadd('TemporalDiff', '\%'.line.'l')
endfunction

দ্রষ্টব্য :

  • এই ফাংশনটি পুরানোটিকে সরিয়ে না দিয়ে কেবল একটি নতুন হাইলাইট যুক্ত করবে, তাই আপনাকে প্রথমে পুরানোটি সরিয়ে ফেলতে হবে। সঙ্গে clearmatchesফাংশন আপনি একটি নতুন যোগ করার আগে ম্যাচ অপসারণ করতে পারেন। সাবধান, এটি সমস্ত মিলগুলি মুছে ফেলবে । আপনি যদি আরও গ্রানুলারিটি চান, আপনি নিজের ম্যাচটি সংরক্ষণ করতে পারেন এবং এটি ম্যানুয়ালি মুছে ফেলতে পারেন:

যেমন

function! DiffWithPrevious()
  call matchdelete(m)
  ... 
  let m = matchadd('TemporalDiff', '\%'.line.'l')
endfunction
  • কিছু পরীক্ষার পরে, আমি জানতে পেরেছি এটি কেবল এক-লাইন পরিবর্তনের জন্য কাজ করে।

তথ্যসূত্র:


পুরানো সমাধান

এখানে একটি সম্ভাব্য সমাধান রয়েছে যা মূলত ডিফ বর্তমান বাফার এবং মূল ফাইল দ্বারা অনুপ্রাণিত :

function! DiffWithPrevious()
  undo
  write
  redo
  let filetype=&ft
  diffthis
  vnew | r # | normal! 1Gdd
  diffthis
  exe "setlocal bt=nofile bh=wipe nobl noswf ro ft=" . filetype
endfunction

ধারণাটি হ'ল সিস্টেমে ফাইলটির সাথে ফাইলটি পৃথক করা, সুতরাং আপনি আপনার শেষ পরিবর্তনটি পূর্বাবস্থায় ফেলাবেন, লিখুন, লস পরিবর্তনটি আবার করুন এবং ভিন্নটিকে সম্পাদন করুন।

আমি মনে করি এটি সময়ে সময়ে টেম্পোরাল ডিফারেন্সের জন্য কাজ করা উচিত।


ডিফউইথপ্রিরিয়াস () এ "বাফার" বার্তাটি সাফ করার একটি উপায় আছে? আমি চাই ফাংশনটি কেবলমাত্র সর্বশেষ পরিবর্তনগুলি হাইলাইট করা হয়েছে, তবে হাইলাইট সময়ের সাথে সাথে জমে যাচ্ছে, আমি বার্তা = 0 বা বার্তা = "" এর মতো কিছু চেষ্টা করছি তবে কোনও সাফল্য নেই।
tjbrn

অবশ্যই হ্যাঁ, আমার উত্তর আপডেট করুন।
nobe4


2

যে কেউ আমার মতো চেষ্টা করছে, তার পক্ষে এটি সবচেয়ে কাছের যে আমি উত্তরগুলির জন্য ধন্যবাদ পৌঁছেছি।

function! DiffWithPrevious()
  call clearmatches()
  undo
  redir => message
  silent changes
  redir END
  let line = matchstr(message, '\v\n\s{4}1[^0-9]*\zs\d+\ze')
  highlight TemporalDiff ctermbg=black guibg=black
  let m = matchadd('TemporalDiff', '\%'.line.'l')
  redraw
  let gchar = getchar()
  highlight TemporalDiff ctermbg=none guibg=none
  let m = matchadd('TemporalDiff', '\%'.line.'l')
endfunction
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.