केवल दृश्य चयन के भीतर कैसे बदलें?


27

एक vim कैसे प्राप्त करता है दृश्य चयन के भीतर एक चरित्र को बदलने के लिए केवल और नहीं लाइन पर कहीं और? उदाहरण:

  • रेखा: int arr[] = { 00 01 02 03 04 05 05 /* ... lots more like this*/};
  • दृश्य चयन: { 00 01 02 03 04 05 05 /*... lots more like this*/}
  • कमान: :'<,'>s/\ /\,0x/g
  • अपेक्षित होना: int arr[] = {0x00,0x01,0x02,0x03 /* and so on*/};

हालांकि इन क्रियाओं को करने के बाद, वास्तविक परिणाम है:

int,0xarr[],0x=,0x{0x00,0x01,0x02,0x03 /* and so on*/};

क्या अपेक्षित परिणाम देने के लिए ऊपर दिए गए आदेश को संशोधित करने का कोई तरीका है? करता नहीं '<और '>रेंज खोज जिस पर परिभाषित करते हैं (और की जगह) काम आदेश?


2
मुझे इसका उत्तर नहीं पता है, लेकिन मुझे पता है कि :substituteऑपरेटर लाइन के आधार पर लाइन में हैं, जो बताता है कि आप अपने उदाहरण में क्या देख रहे हैं।
कार्ल यंगवे लर्वग

जवाबों:


32
:'<,'>s/\%V\ /\,0x/g

%Vदृश्य क्षेत्र के अंदर मेल खाता है। देख लो :help %V


1
यह उल्लेख किया जाना चाहिए, कि यह समाधान केवल पुष्टि करता है, कि मैच की शुरुआत दृश्य चयन के अंदर है
क्रिश्चियन ब्रेबेंड

7

उस के \%Vलिए है, देखें :h %V:

\% वी

दृश्य क्षेत्र के अंदर मिलान करें। जब दृश्य मोड को पहले से ही उस क्षेत्र में मैच रोक दिया गया है जो जीवी का आकार बदल देगा। यह एक / शून्य-चौड़ाई वाला मैच है। यह सुनिश्चित करने के लिए कि संपूर्ण पैटर्न दृश्य क्षेत्र के अंदर है और इसे पैटर्न के आरंभ और अंत में रखें , जैसे:> / END%Vfoo.*bar\%V

बदलने के लिए fooद्वारा barचयन केवल, उपयोग में:

:'<,'>s/\%Vfoo\%V/bar/
:'<,'>s/\%Vfoo\%V/bar/g
:'<,'>s/\%Vfoo\%V/bar/cg

इस विशेष मामले में:

:'<,'>s/\%V\ \%V/\,0x/g

4

यदि आप किसी विजुअल ब्लॉक में स्थानापन्न करना चाहते हैं , तो आप vis.vimप्लगइन का उपयोग कर सकते हैं ।

http://vim.wikia.com/wiki/Applying_substitutes_to_a_visual_block

स्थापित करने के लिए:

Http://www.drchip.org/astronaut/vim/index.html#VIS से vis.vba.gz डाउनलोड करें

# Open vis.vba.gz in Vim 7.1 or later.
vim vis.vba.gz

# Source the open file.
:so %

# Quit Vim
:q

एक बार स्थापित:

ctrl-v to enter visual-block mode
Move to select the block you want
:B s/pattern/newtext/

जब आप टाइप :Bकरेंगे, तो आप यह देखेंगे

:'<,'>B 

यह ठीक है, यह सिर्फ यह कहना है कि कमान वर्तमान में चयनित दृश्य ब्लॉक पर लागू होगी।

इससे भी बेहतर, आप दृश्य ब्लॉक पर किसी भी पूर्व कमांड का प्रदर्शन कर सकते हैं, न कि केवल प्रतिस्थापन। उदाहरण के लिए :B !sort

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