Vi में नियंत्रण वर्ण (^ @, ^ M, ^ I ...) खोजें और बदलें


14

मैंने /proc/some_proc_id/cmdlineअपनी ubuntu मशीन से इस लाइन की प्रतिलिपि बनाई ,

java^@-jar^@/usr/lib/selenium/selenium-server-standalone.jar^@-port^@4444^@-trustAllSSLCertificates^@

किसी तरह, अंतरिक्ष वर्ण ^@vi द्वारा दर्शाए जाते हैं । मैंने कमांड का उपयोग करते हुए उन्हें अंतरिक्ष वर्णों से बदलने की कोशिश की,

:%s#^@# #g

लेकिन यह कहते हैं, pattern not found ^@

कोई व्यक्ति विशेष वर्णों को कैसे बदल सकता है जो विशेष रूप से कैरेट प्रतीक के साथ शुरू होता है?


आपके द्वारा उपयोग किया जा रहा टर्मिनल प्रकार क्या है?
एड हील

TERMकई बार, और कई बार, यह हैscreen

टर्मिनल प्रोग्राम क्या आप उपयोग कर रहे हैं और TERMपर्यावरण चर सही ढंग से सेट है?
एड हील

जवाबों:


15

किसी तरह, अंतरिक्ष वर्ण ^@vi द्वारा दर्शाए जाते हैं ।

यह ऐसा नहीं viहै। यद्यपि आप तर्कों के बीच रिक्त स्थान के साथ गोले में कमांड लाइन टाइप करते हैं, कमांड लाइन वास्तव में आंतरिक रूप से तार के असतत अनुक्रम होते हैं, न कि एक लंबे अंतरिक्ष-पृथक स्ट्रिंग। शेल को कमांड लॉन्च होने से पहले कमांड लाइन को अलग-अलग तर्क स्ट्रिंग्स में अलग कर दिया गया था।

C में, स्ट्रिंग्स को NUL वर्णों के साथ समाप्त कर दिया जाता है और उन्हें निम्न रूप में दिखाया जाता है ^@

कोई व्यक्ति विशेष वर्णों को कैसे बदल सकता है जो विशेष रूप से कैरेट प्रतीक के साथ शुरू होता है?

उन पात्रों को टाइप करने के लिए, आपको उनके साथ उपसर्ग करना होगा Control- vशाब्दिक अगले चरित्र के लिए।

इस मामले में उदाहरण के लिए: Control- vइसके बाद Control- @

विशेष चरित्र जो शाब्दिक अगले वर्णों का परिचय देता है, सामान्य रूप से होता है Control- vलेकिन यह वास्तव में विन्यास योग्य है। stty -aयह पता लगाने के लिए टाइप करें कि यह किस पर सेट है। के लिए देखो lnextउत्पादन में।


पोस्ट जानकारीपूर्ण है .. लेकिन मेरे सवाल के लिए वास्तविक समाधान कैरेट प्रतीक भागने है - :%s#^@##g। जब से मैं कॉपी करता हूं, टर्मिनल से चिपकाया जाता है, vi ने उन्हें मूल पात्रों के रूप में चिपका दिया है ...

1
@MadhavanKumar आप कैरट प्रतीक बच नहीं है, क्योंकि वहाँ है कोई कैरट प्रतीक। यह वास्तव में एक वास्तविक नियंत्रण चरित्र है। ^letterउसके लिए सिर्फ दृश्य संकेतन है, कोई वास्तविक कार्यवाहक शामिल नहीं है। और हाँ, आपको नियंत्रण वर्ण से बचना होगा, Ctrl-V यह है कि आप कीबोर्ड से ऐसा कैसे करते हैं। जो हर जगह सबसे ज्यादा काम करता है। FYI करें, दूसरे उत्तर में एक वैकल्पिक, विशिष्ट viकमांड लाइन होती है, जिससे नियंत्रण चरित्र टाइप करने से बचा जा सके।
सेलडा

@ माधवनकुमार यदि आपके टर्मिनल ने एनयूएल वर्णों को दो-वर्ण स्ट्रिंग के रूप में प्रदर्शित किया है ^@और आपने इसे कॉपी-पेस्ट किया है, तो \^@vi में उस दो-वर्ण स्ट्रिंग का प्रतिनिधित्व करने के लिए उपयोग करें। बहुत सारे सॉफ्टवेयर बैकस्लैश का उपयोग करते हैं, जिसका अर्थ है "अपने विशेष फ़ंक्शन का उपयोग करने के बजाय अगले वर्ण की व्याख्या करना"।
गिल्स एसओ- बुराई को रोकें '

@ गिल्स, आप सही कह रहे हैं .. यही मैंने

4

वह प्रतीक ASCII मान 000 के साथ एक पूर्ण वर्ण का प्रतिनिधित्व करता है।

तुम कोशिश कर सकते हो:

:%s/\%x00/ /g

वैकल्पिक:

कीबोर्ड पर जहां 2कुंजी के ऊपर @ प्रतीक है (धन्यवाद Celada) आप कर सकते हैं:

  • %s/<CTRL-2>/ /g (पीसी पर)

  • %s/<CTRL-SHIFT-2>/ /g (मैक पर)

जहां <CTRL-2>पहले CTRLपीसी पर नीचे दबाते हैं , उसे नीचे दबाए रखें, हिट करें 2, जारी करें CTRL

और <CTRL-SHIFT-2>इसका मतलब है कि पहले controlमैक पर नीचे दबाएं , इसे नीचे दबाए रखें, shiftमैक पर नीचे दबाएं , इसे नीचे दबाए रखें, हिट करें 2, रिलीज करें controlऔर shift

अंत में, दोनों आदेशों का परिणाम %s/^@/ /gस्क्रीन पर होना चाहिए । ^@एक एकल चरित्र का मतलब है, ^उसके बाद नहीं @, इसलिए आप केवल ऊपर दिए गए आदेश में टाइप ^और @एक पंक्ति में नहीं कर सकते ।

यह कमांड सभी ^@स्पेस कैरेक्टर्स को बदल देता है ।

( स्रोत )


जब आप "पीसी" कहते हैं, तो क्या आपका मतलब विंडोज है?
स्पार्कहॉक

1
CTRL-2 और CTRL-SHIFT-2 केवल कीबोर्ड लेआउट पर समझ में आता है जहां कुंजी के @शीर्ष पर है 2
सेलडा

@ श्रावक: नहीं, मेरा मतलब एक लिनक्स पीसी है। :-)
एरिक

CTRL क्यों? मैंने कभी ऐसा सिस्टम नहीं देखा है जहां CTRL कुंजी के विभिन्न अर्थों के बीच बदलाव करने के लिए उपयोग की जाने वाली कुंजी है। वह आमतौर पर SHIFT है।
terdon

यह अजीब है (शायद विम में एक बग?), लेकिन यह काम करता है। यह आमतौर पर ctrl + shift + 2 (एक us-कीबोर्ड पर) होना चाहिए। इसे एक अलग प्रश्न के रूप में पूछें या विम डेवलपर्स से पूछें। किसी भी तरह सेलाडा का जवाब नियंत्रण-पात्रों के लिए अधिक सामान्य है।
एरिक

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