উত্তর:
http://vim.wikia.com/wiki/Diff_current_buffer_and_the_original_file
বর্তমানে সম্পাদিত ফাইল এবং ফাইল সিস্টেমে এর অপরিবর্তিত সংস্করণের মধ্যে পার্থক্য দেখার জন্য একটি ফাংশন এবং কমান্ড এখানে রয়েছে। এটি কেবল আপনার ভিএমআরসি বা প্লাগইন ডিরেক্টরিতে রেখে দিন, একটি ফাইল খুলুন, সেগুলি সংরক্ষণ না করে কিছু পরিবর্তন করুন এবং করুন
:DiffSaved
।function! s:DiffWithSaved() let filetype=&ft diffthis vnew | r # | normal! 1Gdd diffthis exe "setlocal bt=nofile bh=wipe nobl noswf ro ft=" . filetype endfunction com! DiffSaved call s:DiffWithSaved()
ভিন্ন দৃষ্টিভঙ্গি থেকে বেরিয়ে আসার জন্য আপনি
:diffoff
কমান্ডটি ব্যবহার করতে পারেন ।নীচে একটি অনুরূপ ফাংশন দেওয়া হয়েছে,
'cvs diff'
আদেশটি অনুকরণ করার জন্য ...
:w !diff % -
diff
। %
বর্তমানে খোলা ফাইলপথ বোঝায়। কেন এই সমস্ত :w
আদেশের একটি যুক্তি ? এছাড়াও, কীভাবে -
ওয়ার্কিং বাফারের বিষয়বস্তুগুলিকে বরাদ্দ দেওয়া হয়? এটি কি ভিআইএম-এ স্বয়ংক্রিয়, শেল কমান্ডের জন্য বাফারের সামগ্রীগুলি (বা সম্ভবত কোনও নির্দিষ্ট পরিসর) স্টিডিনকে দেওয়া হবে?
:w
কারণ আমরা ফাইলটি কমান্ডটিতে (অন stdin
) লিখছি । কমান্ডে, -
এটি থেকে পড়তে বলে stdin
।
:w !git diff % -
রঙিন সংস্করণ ব্যবহার করুন , যদি আপনি গিট ইনস্টল করেন!
fatal: bad flag '-' used after filename
চালানোর সময় ত্রুটিটি পাই :w !git diff % -
।
কারণ কিছু লোক আদেশের ব্যাখ্যা সম্পর্কে জিজ্ঞাসা করেছিল
:w !diff % -
আরও বিস্তারিত উত্তর লেখার জন্য আমার এই প্রচেষ্টাটি এখানে:
আমি ধরে নিচ্ছি যে আপনি কোনও সিস্টেমে কাজ করছেন cat
এবং echo
ইনস্টল করেছেন (যেমন প্রায় কোনও জিএনইউ / লিনাক্স, ম্যাক ওএস, বিএসডি এবং অন্যান্য ইউএনএক্স-এর মতো সিস্টেম)।
উপরের কমান্ডটি নিম্নলিখিত হিসাবে কাজ করে:
ভিমে ফাইল সংরক্ষণের বাক্য গঠনটি হ'ল:
:w <filename>
ভিমে শেল কমান্ড চালানোর সিনট্যাক্সটি হ'ল:
:!<command>
ভিএম দ্বারা ইস্যু করা শেল পরিবেশের অভ্যন্তরে %
বর্তমান ফাইলের নাম চিহ্নিত করা হয়। আপনি নিম্নলিখিতটি সম্পাদন করে এটি যাচাই করতে পারেন:
:!echo %
এই ফাইলনামটি আউটপুট করা উচিত (অথবা একটি ত্রুটি, যদি ভিএম ফাইল নাম ছাড়া চালানো হয়)।
বিড়াল ব্যবহার করে আমরা ফাইলের সামগ্রীটিও আউটপুট করতে পারি:
:!cat %
এটি ফাইলগুলির সামগ্রীটিকে সর্বশেষ সংরক্ষিত অবস্থায় বা কোনও ত্রুটি যদি এটি কখনও সংরক্ষণ না করা হয় তবে তা ফিরিয়ে আনতে হবে।
প্রোগ্রাম ডিফ স্ট্যান্ডার্ড ইনপুট (স্টিডিন) থেকে পড়তে সক্ষম। এর ম্যান পৃষ্ঠাতে নিম্নলিখিতটি উল্লেখ করা হয়েছে:
[...] যদি কোনও ফাইল '-' হয় তবে স্ট্যান্ডার্ড ইনপুট পড়ুন। [...]
ফাইলের নাম ব্যতীত সেভ কমান্ড প্রয়োগ করা নয় বরং এর পিছনে একটি শেল কমান্ড প্রয়োগ করার ফলে ভিআইএম শারীরিক ফাইলগুলিতে সংরক্ষণের পরিবর্তে শেলটির স্টিডিনে ফাইল সামগ্রী লিখতে পারে। আপনি কার্যকর করে এটি যাচাই করতে পারেন
:w !cat
এটি সর্বদা ফাইলগুলির বর্তমান সামগ্রীকে মুদ্রণ করা উচিত (যা পরিবর্তে কোনও ফাইলে লেখা হত)।
এটি একসাথে রাখা (বা tl; dr): ফাইলটি স্টিডিনে "সংরক্ষণ করা হয়েছে", ফাইলের নাম এবং স্টিডিনের সাথে ইনপুট হিসাবে চালানো হয়।
এটি জানার সাথে ভিমডিফের মতো কিছু করার সাথেও ফাইলগুলির তুলনা করা যেতে পারে - এটি এমন একটি ধারণা যা আপনি এটি করতে চান না:
:w !cat > /tmp/tempFile && vimdiff /tmp/tempFile % && rm /tmp/tempFile
(তারপরে পঠনযোগ্য খুলুন এবং ব্যবহার করে ভিমডিফ বন্ধ করুন :qall
)
vim - -c ":vnew $1 |windo diffthis"
, এটি কার্যকর হবে, উদাহরণস্বরূপ PATH এ এটি সংরক্ষণ করুন vimdiffWithStdin
এবং তারপরে :w !vimdiffWithStdin %
:w !vimdiff % /dev/stdin
। জানিনা উইন্ডোজের জন্যও একই ধরণের কৌশল রয়েছে কিনা।
vimrc_example.vim থেকে:
" Convenient command to see the difference between the current buffer and the
" file it was loaded from, thus the changes you made.
if !exists(":DiffOrig")
command DiffOrig vert new | set bt=nofile | r # | 0d_ | diffthis
\ | wincmd p | diffthis
endif
w !diff % -
vim sftp://example.com/foo.txt
নিম্নলিখিতটি ব্যবহার করুন এবং ব্যবহার করুন: ডিআইএফএফ কমান্ড
function! s:diff()
let tmpa = tempname()
let tmpb = tempname()
earlier 100h
exec 'w '.tmpa
later 100h
exec 'w '.tmpb
update
exec 'tabnew '.tmpa
diffthis
vert split
exec 'edit '.tmpb
diffthis
endfunction
command! -nargs=0 DIFF call <SID>diff()
আপনি যা খুঁজছেন ঠিক তা নয় তবে এসসিএমডিফ.ভিম সত্যিই দুর্দান্ত। একটি কিপ্রেস, এবং এটি সোর্স কন্ট্রোল রেপোতে আপনার বর্তমান ফাইলটিকে মাথা সংশোধন করে পৃথকভাবে হাইলাইট করে। এর অর্থ অনেকগুলি এসএমএসের সাথে কাজ করা। আমি এটি পারফরম্যান্স সহ ব্যবহার করি।
এখানে বিভিন্ন উত্তরের উপর ভিত্তি করে একটি প্লাগইন রয়েছে: https://github.com/gangleri/vim-diffsaved
এটি :w !diff % -
পদ্ধতি এবং আরও জড়িত diffthis
একটি সরবরাহ করে।
আনডোট্রি ছাড়াও এটি এটিকে অনুমতি দেয় তবে আরও অনেক কিছু (বিভিন্ন পূর্ববর্তী চেকপয়েন্টগুলির মধ্যে পৃথক)। গুন্ডোর মতোই ।
আমি হিস্টউইনকে সুপারিশ করতে পারি প্লাগইনটি ।
যদিও এটি ফাইলের বর্তমান সংরক্ষিত সংস্করণটির সাথে আলাদা নয় (অন্যান্য উত্তরগুলির মতো), আপনি সম্পাদনা শুরু করার পরে এটি পরিবর্তনগুলি এবং এমনকি পুনরায় প্লে করতে পারবেন আপনার পরিবর্তনগুলিআপনি যদি মাঝারিভাবে সংরক্ষণ করেন তবে পার্থক্যটি দেখায়।
অতিরিক্তভাবে, এটি সমস্ত পূর্বাবস্থায় থাকা ইতিহাস শাখার একটি তালিকা প্রদর্শন করে এবং আপনাকে তাদের মধ্যে স্যুইচ বা পৃথক করার অনুমতি দেয়।
PS: প্রতিটি ফাইল পরিবর্তনের পর থেকে প্লাগইনটি সম্পাদনা ইতিহাসের মুহুর্তগুলিকে স্বয়ংক্রিয়ভাবে ট্র্যাক করে না, আপনি যখন ফাইলটি সংরক্ষণ করেন তখন আপনি সেই মুহূর্তটি স্পষ্টভাবে "ট্যাগ" করতে পারেন, যদি আপনি এটি চান তবে পরে এটির সাথে ভিমিডিফ করতে পারবেন। এই কি স্বয়ংক্রিয় করা যেতে পারে?
আপনি যদি ভিমডিফের মতো তুলনা করার জন্য ভিম ব্যবহার করতে চান তবে আপনি এই জাতীয় কিছু করতে পারেন:
আপনার .vimrc সম্পাদনা করুন এবং যুক্ত করুন:
nmap <F8> :w !vim -M -R - -c ":vnew % \| windo diffthis"<CR><CR>
সেখান থেকে আপনি আপনার পরিবর্তনগুলি দেখতে পাবেন qall
এবং কমান্ড মোডে F8 টিপে বিমডিফের মতো ব্যবহার করে ভিন্ন মতামতটি ছাড়তে পারেন। আপনার পছন্দের যে কোনও কী দিয়ে F8 প্রতিস্থাপন করুন।
সম্পাদনা: কোনও সংশোধন বাতিল করার জন্য -এম যুক্ত করা হয়েছে, কারণ এটি সংরক্ষণ করা হয়নি।
Vim: Error reading input, exiting...
কোন ভুল হতে চলেছে কোন ধারণা পেতে পারি ?
git নিম্নলিখিত কমান্ড সমর্থন করে
:w !git diff --no-index -- % -
আপনার ~ / .vimrc এ নিম্নলিখিত যোগ করে একটি কমান্ডে মানচিত্র করুন
command GitDiff execute "w !git diff --no-index -- % -"
:GitDiff
প্রতিটি সঞ্চয়ের আগে দ্রুত পার্থক্য প্রদর্শন করার জন্য এক্সিকিউট করা একটি সহজ সামান্য কমান্ডে পরিণত হয়।
আপনি এর সাথে একটি শেষ ব্যাকআপ এবং আসল ব্যাকআপ তৈরি করতে ভিএম তৈরি করতে পারেন:
:set backup
:set patchmode=.orig
এরপরে, আপনি এগুলি একটি বিভক্তিতে খুলতে পারেন:
:vsp %:p~ or :vsp %:.orig
এবং সেখান থেকে করুন:
:vimdiff in each buffer
যদি আপনি কোনও বামপাশের উপর মৃত না হয়ে থাকেন তবে ভিডমিফ চান, আপনি এটি করতেও পারেন:
ggVGy # copy the whole buffer
:vnew # open a split
CTRL-W w # switch to it
shift-P # paste at start
এবং তারপরে করুন: প্রতিটি বিভক্তিতে পৃথক
আপনি কেবল সম্পাদিত [ বাফার ] পরিবর্তনগুলি , অর্থাৎ শেষ রক্ষিত সংস্করণ ( ওয়ার্কিং ডায়ার ইক্টোরি) থেকে পৃথক হওয়াগুলি, এগুলি সর্বশেষ সূচী সংস্করণ ( গিট ) এর সাথে পৃথক হতে পারে । আমি উভয় ম্যাপ:
" Find diff inbetween currrent buffer and ... A{last index version} vs B{last saved version in working directory}
" - A{last index version}: the file as you last commited it
" git diff to vimdiff against the index version of the file:
nnoremap <leader>gd <Esc>:Gvdiff<CR><Esc>:echo "currentBuffer vs lastIndexVersion (last commited)"<CR>
" - B{last saved version in working directory}: the file you last :w,
" not neccesary commited it (not commited for sure if it is in NO git project)
" https://vim.fandom.com/wiki/Diff_current_buffer_and_the_original_file
nnoremap <leader>gd2 <Esc>:DiffSaved<CR><Esc>:echo "currentBuffer vs lastSaved (not neccesary equal to last commited)"<CR>
function! s:DiffWithSaved()
let filetype=&ft
diffthis
vnew | r # | normal! 1Gdd
diffthis
exe "setlocal bt=nofile bh=wipe nobl noswf ro ft=" . filetype
endfunction
com! DiffSaved call s:DiffWithSaved()
ভিডমিফ বনাম জিডিফের উদাহরণ।
তদ্ব্যতীত, vimdiff
অন্য পথে সহজ নাম ফাইলটি:
" vimdiff homonym file
nnoremap <leader>dh <Esc>:vsplit %:p:h/../__/%:t <bar> :windo diffthis<Left><Left><Left><Left><Left><Left><Left><Left><Left><Left><Left><Left><Left><Left><Left><Left><Left><Left><Left><Left><Left><Left><Left><Left>
"E.g."$ vim /path01/proj02_pg064/processorder.php
":vsplit %:p:h/../proj01_pg05/%:t | :windo diffthis
Gdiff
সম্ভব হলে এবং অন্যথায় (যেমন গিট প্রকল্প নয়) তারপরে একটি সম্পাদন করুন :vimdiff
। সঙ্গে try-catch-endtry
। তবে :DiffWithSaved
গিট প্রকল্পে এইভাবে অভাব রয়েছে।
:w !diff % -
যখন চিরচেনা এবং বিপুল সংখ্যক বাক্সে ভিএম ব্যবহার করছেন তখন বিকল্পটি উচ্চতর নয়, যার জন্য আপনি সহজেই .vimrc পরিবর্তন করতে পারবেন না? (প্রদত্ত তারা