क्या पूर्ववत इतिहास से प्रविष्टि को निकालना संभव है?


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बिट केवल आवश्यक है यदि आप नियोफोर्मेट प्लगइन का उपयोग कर रहे हैं , और आपके पास नहीं होने पर समस्या पैदा करेगा।
8bittree

ठीक है, कमांड आपके ऊपर है, इसे इंगित करने के लिए धन्यवाद!
किजीर

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
एक पूर्ववत किए जाने के बाद अंडरजॉइन की अनुमति नहीं है। आप फिर उन पूर्ववत प्रविष्टियों को बदल नहीं सकते। इसलिए आप त्रुटि देखते हैं। जहाँ तक मुझे पता है, वहाँ आप इस स्थिति की जाँच नहीं कर सकते हैं, इसलिए आप इसे try|catchE790 के लिए एक खंड में लपेटना चाहते हैं या बस :sil!चेतावनी को चुप करने के लिए उपयोग कर सकते हैं।
क्रिश्चियन ब्रेबेंड

@ChristianBrabandt क्या दो तकनीकों के बीच अंतर है?

हाँ, एक एक कण त्रुटि को शांत करता है, दूसरा हर त्रुटि को शांत करता है
क्रिश्चियन ब्रेबंट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.