vim: किसी फ़ाइल में सभी पंक्तियों के पहले n अक्षर छिपाएँ


12

मैं vim का उपयोग करके लॉग फ़ाइल का विश्लेषण कर रहा हूं और प्रारूप इस तरह दिखता है

YYYY-MM-DD HH:MM:SS.USEC PID Name LogText

चूंकि अधिकांश समय मैं तारीख और समय की परवाह नहीं करता। मैं उन्हें छिपाना चाहता हूं और केवल नाम और लॉगटेक्स्ट कॉलम (कुछ स्क्रीन एस्टेट बचाने के लिए) पर ध्यान केंद्रित करना चाहता हूं। चूंकि पहले तीन कॉलम हमेशा एक पंक्ति में पहले 35 अक्षरों पर कब्जा कर लेते हैं। क्या प्रत्येक पंक्ति के पहले 35 अक्षरों को प्रदर्शित नहीं करने का कोई तरीका है?


मुझे नहीं पता कि आप इसे कैसे करते हैं, लेकिन अगर आपको कोई अस्थायी फ़ाइल बनाने में कोई आपत्ति नहीं है, तो आप चला सकते हैं cut -c36- logfile > logfile_with_first_35_chars_missing, और फिर उसकी समीक्षा कर सकते हैं।
वार्विक

जवाबों:


7

आपने पहले अक्षरों को छिपाने के बारे में पूछा, न कि उन्हें हटाने के लिए, या उन्हें दृष्टि से बाहर स्क्रॉल करने के लिए - तो यहां बताया गया है कि वास्तव में उन्हें कैसे छिपाया जाए:

छिपाना का उपयोग करते हुए पाठ को छिपाएँ

आप मिलान का उपयोग कर सकते हैं , सिंटैक्स हाइलाइटिंग के साथ संयुक्त और छिपी हुई विशेषता वास्तव में लाइनों के अंदर मिलान किए गए वर्ण नहीं दिखा सकते हैं।

प्रत्येक पंक्ति के पहले 25 वर्णों को छिपाने के लिए:

:syn match Concealed '^.\{25\}' conceal
:set conceallevel=2

इसके बजाय केवल दिनांक की विराम चिह्न वाली पंक्तियों को छिपाने के लिए:

:syn match Concealed '^....-..-.. ..:..:..\..... ' conceal

अनसुना करने के लिए:

:syn clear Concealed
:set conceallevel=0

आम तौर पर ऐसा क्या दिखता है:

YYYY-MM-DD HH:MM:SS.USEC PID Name LogText
YYYY-MM-DD HH:MM:SS.USEC PID Name LogText
YYYY-MM-DD HH:MM:SS.USEC PID Name LogText
YYYY-MM-DD HH:MM:SS.USEC PID Name LogText
YYYY-MM-DD HH:MM:SS.USEC PID Name LogText
YYYY-MM-DD HH:MM:SS.USEC PID Name LogText
YYYY-MM-DD HH:MM:SS.USEC PID Name LogText

पहले दो आदेशों को निष्पादित करने के बाद इस तरह दिखेगा:

PID Name LogText
PID Name LogText
PID Name LogText
PID Name LogText
PID Name LogText
PID Name LogText
PID Name LogText


यह भी देखें - अंदर vim:
help :syn-match
help :syn-conceal
help 'conceallevel'
help 'concealcursor'


(मुझे बताएं कि क्या यह उस तरह का व्यवहार नहीं करता है - कुछ और सेटिंग हो सकती है जो मुझे पता नहीं है या नहीं - मुझे यह काम करना होगा।)


1
ठीक काम करता है, मुझे लगता है कि +concealइस काम के लिए विम को (मेरा है) विकल्प के साथ संकलित करने की आवश्यकता है । set concealcursor=ncकर्सर लाइन को विस्तार से रोकने के लिए भी करना अच्छा है ।
user881300

हां, +concealकुछ वर्षों की तरह सुविधा विकल्प मानक है। दुख की बात है कि यह अब तक अधिक प्रसिद्ध नहीं है। यह वास्तव में महान और लचीला है। बहुत सारे नए विकल्प देता है ...
वोल्कर सेगेल

8

Vim की फ़िल्टर कार्यक्षमता का उपयोग करें । Daud:

:%!cut -b36-

अपने बफ़र की सामग्री को cutकमांड के माध्यम से चलाने के लिए , केवल बाइट्स 36 और उसके बाद बनाए रखें। %पूरे बफर को चलाने और आउटपुट के साथ इसकी सामग्री को बदलने का मतलब है, फिर !फिल्टर कमांड है, बाकी लाइन के साथ प्रोग्राम चलाने के लिए। यह अंतर्निहित फ़ाइल को संशोधित नहीं करता है जब तक कि आप शीर्ष पर बफर को नहीं बचाते हैं।

मूल अप्रयुक्त बफर को वापस पाने के लिए आप इसका उपयोग कर सकते हैं :e, बशर्ते कि यह एक वास्तविक फ़ाइल द्वारा समर्थित हो।


और फिर %!cat %इसे वापस पाने के लिए उपयोग करें? यह बहुत अच्छा काम करता है और मैं mapइन दोनों के बीच एक टॉगल का उपयोग कर सकता हूं
user881300

हां, यह तब तक काम करेगा, जब तक आपके पास एक वास्तविक फाइल है, जो आपके बफर का समर्थन करती है।
माइकल होमर

3
@ मिचेल होमर: यह अब यूनिकोड के पात्रों के साथ काम करेगा।
कोउन्ग्लम

6

मुझे लगता है कि आप जिस चीज की तलाश में हैं, वह क्षैतिज स्क्रॉलिंग है

Z क्षैतिज स्क्रॉल कमांड कुंजी है, जो बाएं या दाएं तीर कुंजी के साथ स्थानांतरित करने के लिए एक दिशा है।

:set nowrapलाइन रैपिंग को अक्षम करने के लिए सबसे पहले । फिर प्रेस z, 35, 35 रिक्त स्थान स्क्रॉल करने के लिए।


लॉग पढ़ते समय यह बहुत उपयोगी है, धन्यवाद!
फाबियो एफ।

ठीक है, एक ही पृष्ठ के लिए बहुत अच्छा है, लेकिन ... लाइन की शुरुआत के बिना फिर से नीचे कूदने वाले कर्सर के बिना पृष्ठ नीचे या पृष्ठ कैसे करें?
इलेश

बस पाया कि यह कैसे करना है @ user2987828 उत्तर में: का उपयोग करना:set nosol
मारी

अंतिम चरित्र पर कर्सर रखें जिसे आप छिपाना चाहते हैं। फिर टाइप करें ...[Esc] z s
4

2

कमांड मोड में, कोशिश करें:

:%s/^.\{35}//
  • %s/pat/sub/: उप के साथ पैट की प्रत्येक घटना को बदलें
  • ^.\{35}: लाइन के पहले 35 अक्षरों से मेल खाते हैं

यह आदेश प्रत्येक पंक्ति के पहले 35 वर्णों को हटाता है। आप :h regular-expressionनियमित अभिव्यक्ति के बारे में अधिक जानकारी के लिए पढ़ सकते हैं vim


1

बफ़र्स या फ़ाइलों को संशोधित किए बिना, समाधान को याद रखना आसान है। अपने कर्सर को उस Lफ़ाइल भाग के पहले चरित्र ( आपके उदाहरण पर) पर रखें जिसे आप देखना चाहते हैं, फिर टाइप करें

:set nowrap
zs

zsआदेश इच्छा सेटअप vi ताकि है कि स्क्रीन के पहले कॉलम में कर्सर प्रकट होता है के साथ चरित्र। सुनिश्चित करें कि आपने :set nosolअपनी कॉन्फ़िगरेशन फ़ाइलों में टाइप नहीं किया है ।

g$आदेश अंतिम दृश्यमान स्तंभ के लिए अपने कर्सर स्थानांतरित हो जाएगी।

g0आदेश एल युक्त एक पहला दृश्य स्तंभ के लिए अपने कर्सर वापस चले जाएँगे,

यदि कोई कुंजी दिखाई देने वाले कॉलम से कर्सर को बाएँ या दाएँ ले जाती है, तो दृश्यमान विंडो शिफ्ट हो जाएंगी।


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