2012-08-08 12 views
24

:%s/one/two/ में पिछली घटना को प्रतिस्थापित करें पहलेone की two के साथ प्रतिस्थापित करेगा। क्या पिछले घटना को प्रतिस्थापित करने का कोई आसान तरीका है?लाइन

मैं इसे अंत लाइन के बगल में यह मान सकते हैं नहीं है, और वहाँ इस के समान उपयोग करने के लिए अंतिम बार होने के आसपास अद्वितीय कुछ भी नहीं 'हड़पने' के लिए, है:।

one two three one two three one two one two one two ... 

उत्तर

34

सबसे आसान तरीका है मैच के सामने मनमाने ढंग से पाठ अनुमति देने के लिए होगा, और मिलान किया क्षेत्र \zs का उपयोग कर निर्दिष्ट करें:

:%s/.*\zsone/two/ 
+1

मुझे इस समाधान की सादगी पसंद है। मैं अपने सिर को पिछले दो घंटों के लिए विम में नकारात्मक दिखने का प्रयास करने की कोशिश कर रहा हूं लेकिन यह सीधे काम करता है! धन्यवाद!! – flangofas

11

क्योंकि * लालची है , इस काम करना चाहिए:

:%s/\(.*\)one/\1two/ 
+0

अच्छा और साफ :) – Amir

+1

कभी-कभी लालच का शोषण किया जा सकता है। –

3

आप एक पंक्ति में एक शब्द को बदलना चाहते हैं, तो आप भी कह सकते हैं:

$?one<CR>cetwo<ESC> 

लाइन ($) के अंत में जाना और पीछे की ओर शब्द one (?one<CR>) मिलेगा कौन सा। तो यह होगा परिवर्तन (c) अंत (e) शब्द के स्ट्रिंग two साथ अप करने के लिए सब कुछ। बेशक आप eE, f, F और अन्य के साथ बदल सकते हैं। अगले 17 वर्णों को बदलने के लिए आप c17l भी कह सकते हैं।