পূর্বাবস্থার ইতিহাস থেকে কোনও এন্ট্রি সরিয়ে ফেলা সম্ভব?


10

ইন্ডেন্টেশন সহায়তা করতে আমার .vimrc এ এই লাইনগুলি রয়েছে:

autocmd BufReadPost * set noexpandtab | retab! 4
autocmd BufWritePre * set expandtab | retab! 4
autocmd BufWritePost * set noexpandtab | retab! 4

তবে, পূর্ববর্তী ইতিহাসে তারা প্রচুর শব্দ তৈরি করে। যেহেতু তারা মূলত ব্যবহারকারীর দৃষ্টিকোণ থেকে কিছুই করে না, তাই আমি সেগুলি ইতিহাস থেকে সরাতে চাই বা খুব কমপক্ষে কোনওভাবে স্কোয়াশ করতে পারি (সম্ভবত তারা একসাথে স্কোয়াশ করলে বাতিল হয়ে যায়?)। এটি করার কোন উপায় আছে?


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

উত্তর:


5

যাদের এই সমস্যা রয়েছে এবং সমস্ত ত্রুটি নিরব না করে কীভাবে এটি ঘিরে কাজ করবেন তা অবাক করার জন্য, আমি এখানে এটি কীভাবে করেছি .vimrc:

au BufWritePre * try | undojoin | Neoformat | catch /^Vim\%((\a\+)\)\=:E790/ | endtry

ক্রেডিট খ্রিস্টান ব্র্যাব্যান্ড এবং র‌্যান্ডি মরিসের এই উত্তরটির কাছে


সম্ভবত এটি লক্ষ করা উচিত যে Neoformatআপনি যখন নিওফর্ম্যাট প্লাগইন ব্যবহার করছেন তখনই বিটটি প্রয়োজনীয় এবং আপনার যদি এটি না রাখেন তবে সমস্যা সৃষ্টি করবে।
বিট্রি

হ্যাঁ, আদেশটি আপনার উপর নির্ভর করে, এটি নির্দেশ করার জন্য আপনাকে ধন্যবাদ!
কেজির

Neoformatকমান্ডটি কি শেষের দিকে আসা উচিত নয় (বা বরং কোনও finallyব্লকে)? অন্যথায় :undojoinত্রুটি ছুঁড়ে মারলে এটি কার্যকর করা হবে না ।
ক্রিশ্চিয়ান ব্রাবাঁট

4

ব্যবহার করা undojoinআসলে বেশ ভাল কাজ করে :

autocmd BufReadPost *  undojoin | set noexpandtab | retab! 4
autocmd BufWritePre *  undojoin | set expandtab   | retab! 4
autocmd BufWritePost * undojoin | set noexpandtab | retab! 4

তবে, আপনি যদি :wকোনও ক্রিয়া পূর্বাবস্থায় ফেলার পরে ঠিকঠাক প্রয়োগ করেন তবে আপনি একটি ত্রুটি পাবেন:

Error detected while processing BufWritePre Auto commands for "*":
E790: undojoin is not allowed after undo
Error detected while processing BufWritePost Auto commands for "*":
E790: undojoin is not allowed after undo

মন্তব্যগুলিতেsilent! উল্লিখিত হিসাবে ব্যবহার করে এই ত্রুটিটি নীরব করা যেতে পারে তবে এর কিছু অজান্তেই পার্শ্ব প্রতিক্রিয়া থাকতে পারে:

autocmd BufReadPost *  silent! undojoin | set noexpandtab | retab! 4
autocmd BufWritePre *  silent! undojoin | set expandtab   | retab! 4
autocmd BufWritePost * silent! undojoin | set noexpandtab | retab! 4

2
পূর্বাবস্থায় কাজ শেষ হওয়ার পরে undojoin এর অনুমতি নেই। আপনি সেই পূর্বাবস্থায় প্রবেশগুলি পরিবর্তন করতে পারবেন না। সুতরাং আপনি ত্রুটি দেখতে। যতদূর আমি জানি, সেখানে আপনি এই শর্তটি পরীক্ষা করতে পারবেন না, সুতরাং আপনি এটি try|catchE790 এর একটি ধারাতে আবৃত করতে চান বা :sil!সতর্কতাটি নিঃশব্দ করার জন্য ব্যবহার করতে পারেন ।
খ্রিস্টান ব্রাব্যান্ড

@ ক্রিশ্চিয়ানব্রাব্যান্ড দুটি কৌশলতে কি পার্থক্য রয়েছে?

হ্যাঁ, একজন একটি বিশেষ ত্রুটিটি নিঃশব্দ করে দেয়, অন্যটি প্রতিটি ত্রুটিটি
নিঃশব্দ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.