वर्तमान लाइन नंबर के साथ एक पैटर्न बदलें


16

मैं इस फाइल में 'x' को करंट लाइन नंबर के साथ बदलना चाहूंगा। वह है, परिवर्तन

x
x
x

सेवा

1
2
3

अभी के लिए, मैं एक पर्ल-लाइनर का उपयोग करता हूं:

perl -pi -e '$x=$.; s/x/$x/' myfile.txt

मुझे लगता है कि UltraEdit इसे एक ऊर्ध्वाधर चयन और प्रतिस्थापित कर सकता है। क्या यह विम में किया जा सकता है? (यहां मेरा उदाहरण 'एक्स' मानता है कि सभी एक लाइन पर हैं। लेकिन मेरी असली फ़ाइल में लाइनें बहुत अधिक जटिल हैं।)

जवाबों:


24

हाँ, विम ऐसा कर सकता है! के लिए एक वैश्विक खोज करें x, और इसे बदलें \=printf("%d", line('.')। उदाहरण के लिए:

:%s/x/\=printf("%d", line('.'))

xजरूरत पड़ने पर आप दूसरी खोज में भी बदल सकते हैं ।

स्पष्टीकरण:

यह xमूल्यांकन रजिस्टर के साथ (या आप जो भी खोजते हैं) की हर घटना को बदल देता है \=। यह रजिस्टर vimscript कोड का मूल्यांकन करता है, और एक स्ट्रिंग लौटाता है। इस स्थिति में, कोड का मूल्यांकन किया जा रहा है "एक दशमलव संख्या के रूप में हम जिस रेखा पर हैं उसे प्रिंट करें"


9

चूँकि आपने वर्टिकल सेलेक्ट और रिप्लेस का उल्लेख किया है, आप ऐसा कर सकते हैं। CtrlVउस पाठ के लॉक का चयन करने के लिए उपयोग करें, जिसे आप बदलना चाहते हैं, फिर c0 से बदलने के लिए 0 टाइप करें। फिर, उन 0s का चयन करें:

यहाँ छवि विवरण दर्ज करें

फिर प्रेस g<c-a>( g+ Ctrla):

यहाँ छवि विवरण दर्ज करें

यदि आपने एक एकल स्तंभ को बदल दिया था, तो आप gvउसी क्षेत्र को जल्दी से बदलने के लिए उपयोग कर सकते हैं ।

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