वर्तमान आंतरिक ब्लॉक के दाहिने छोर तक हटाएं


21

मान लीजिए कि मेरे पास इस तरह का एक कोड है ( |कर्सर स्थिति का प्रतिनिधित्व करता है ):

func1(x|, func2(), y); 

मैं लेना चाहता हूँ:

func1(x|);

क्या वर्तमान आंतरिक ब्लॉक के दाएं छोर से पहले कोड को कर्सर की स्थिति से हटाने का एक तरीका है ?

मुझे पता है कि मैं साथ जा सकता हूं dt).लेकिन मुझे आश्चर्य है कि अगर इसमें क्या di)होता है तो इसे मिलाने का कोई तरीका है।


1
मुझे यह जानने में दिलचस्पी है कि क्या "इनर / आउट्टर ब्लॉक के बाएं / दाएं आधे हिस्से को हटाने" का एक आसान तरीका है, जैसा आपने पूछा। लेकिन एक साइड नोट के रूप में, मैं शायद C);इस विशेष मामले में करूंगा ।
शहबाज

1
कभी-कभी %गति वही कर सकती है जो आप खोज रहे हैं (यानी d%)।
alxndr

जवाबों:


29

मै इस्तेमाल करूंगा

d])

जिसका अर्थ dहै कि अगले बेजोड़ ')' ( ])) को हटाएं ( )।

देख लो :help ])


5

प्रेरणाएँ केवल एक दिशा में जाती हैं जबकि पाठ्य-वस्तुएँ केवल दो दिशाओं में जाती हैं।

इसका मतलब यह है कि जब तक आप एक कस्टम ऑपरेटर लंबित प्रस्ताव नहीं बनाते हैं, तब तक आपके पास आधा टेक्स्ट-ऑब्जेक्ट नहीं हो सकता है, जो उस टेक्स्ट-ऑब्जेक्ट को हुड के नीचे उपयोग करता है या उसके व्यवहार की नकल करता है।

आपके उदाहरण में, द्वारा कवर किया गया पाठ i)कल्पना करना बहुत आसान है:

func1(x, func2(), y);
      ^^^^^^^^^^^^^

लेकिन आप उस पाठ के अंत में कर्सर से संचालित करने के लिए विम को कैसे बताएंगे? कस्टम ऑपरेटरों को बनाने की आवश्यकता होगी जैसे obi)और oei)(अर्ध-यादृच्छिक उदाहरण)।

" ()
onoremap oei) :normal! vi)o``<CR>
onoremap obi) :normal! vi)``<CR>

" []
onoremap oei] :normal! vi]o``<CR>
onoremap obi] :normal! vi]``<CR>

" {}
onoremap oei} :normal! vi}o``<CR>
onoremap obi} :normal! vi}``<CR>

" ""
onoremap oei" :normal! vi"o``<CR>
onoremap obi" :normal! vi"``<CR>

" ''
onoremap oei" :normal! vi'o``<CR>
onoremap obi" :normal! vi'``<CR>

4
एक सामान्य गति बनाने के लिए दिलचस्प होगा जो वर्तमान कर्सर स्थिति के साथ संयुक्त सभी पहले से परिभाषित पाठ-वस्तुओं का फिर से उपयोग करता है; उदाहरण के लिए, के बजाय के लिए ib, imbसही करने के लिए और iMbबाईं ओर, और इतने पर (स्वतः)।
VanLaser

3

इस विशिष्ट मामले के लिए मैं करूंगा dfy

सामान्य मामले के लिए:

  • dT( कर्सर को ब्लॉक की शुरुआत से हटाएं
  • vib बाकी आंतरिक ब्लॉक का चयन करें
  • p आंतरिक ब्लॉक को उस जगह से बदलें, जिसे आपने अभी हटाया था

आप इसे मैपिंग में बना सकते हैं।

 :map K dt(vibp

3

अन्य मौजूदा उत्तर सभी विम की परिभाषा और एक ब्लॉक का पता लगाने पर निर्भर हैं। इस तरह के विलोपन के लिए मेरी रणनीति गति के cसाथ संयुक्त कमांड का उपयोग करना है fऔर वास्तविक चरित्र को रोकना है। यह वास्तव में स्टॉप चरित्र को हटा देगा, लेकिन चूंकि यह आखिरी कुंजी थी जिसे आपने दो बार दोहराकर दबाया था, शून्य लागत के बगल में है, और cमोड को सम्मिलित करने के बाद से इसे फिर से सम्मिलित करेगा ।


उदाहरण के साथ समझाने के लिए

func1(x|, func2(), y); 

कमांड c2f))देगा

func1(x)|;

जो पहले कुछ अन्य उत्तरों की तुलना में कम सुरुचिपूर्ण प्रतीत हो सकता है, हालांकि ध्यान दें कि यह रणनीति सार्वभौमिक है और किसी भी ब्लॉक परिभाषा पर निर्भर नहीं करती है।


उदाहरण के लिए

<div| class="some-class">text</div>

कमांड cf>>देगा

<div>|text</div>

या जब csv फ़ाइलों को संपादित करना पसंद है

2016-11-29,question,vi|.stackexchange.com,10435

कमांड cf,,देगा

2016-11-29,question,vi,|10435

अक्सर मैं इसका उपयोग बाकी स्ट्रिंग को हटाने के लिए करता हूं

printf("Hello world| - a boring example\n");

सेवा मेरे

printf("Hello world\|n");

साथ में cf\\

या से

print("Hello world| - a boring example");

सेवा मेरे

print("Hello world"|);

के साथ cf""


यह वर्तमान स्थिति को पूछे जाने की तुलना में थोड़ी अलग जगह में बदल देता है, और सम्मिलित मोड में भी बदल जाता है। लेकिन मैं बाकी चीजों को हटाने के लिए अपने गो-टू-सॉल्यूशन को साझा करना चाहता था।


1
cfसमाधान के साथ समस्या यह है कि मुझे उस चरित्र को निर्दिष्ट करना होगा जहां मैं हटाना बंद करना चाहता हूं। सवाल अगर आप बस ऐसा नहीं कर सकते कि क्या करना है पूछता है cf)वहाँ एक और है, क्योंकि )इससे पहले कि )आप वास्तव में (उदाहरण के लिए, जब आप परिवर्तन करना चाहते हैं तक पहुँचना चाहते हैं func(x|, g(x, x), x, x, g(x, x))करने के लिए func(x))। मूल रूप से, मैं जानना चाहता था कि क्या मैं .बाद में दबाने से बच सकता हूं cf)
मेट्यूज पिओत्रोस्की 21

ध्यान दें कि आप हटाने tके fलिए उपयोग कर सकते हैं लेकिन दिए गए वर्ण को शामिल नहीं कर सकते , इसलिए अपने पहले उदाहरण ( func1(x|, func2(), y);) के लिए, आप बस उपयोग कर सकते हैं d2t)। जैसा कि @MateuszPiotrowski का उल्लेख है, यह एक सामान्य समाधान नहीं है और आपको यह जानने की आवश्यकता है कि आप किस चरित्र को हटाना चाहते हैं। जैसा कि आप आम तौर पर जानते हैं कि कौन सा वर्ण आपके द्वारा दी गई भाषा के लिए ब्लॉक को समाप्त करता है, हालांकि यह इतना बुरा नहीं है।
Haegin 12

3

Vim-निंजा-पैर प्लगइन आप जो खोज रहे हैं हो सकता है। जो मुझे समझ में आता है, वह बनाता है d[और d]"टेक्स्ट ऑब्जेक्ट के शुरू होने / समाप्त होने के लिए कर्सर से हटाता है", इसलिए d]i)"आसपास के कोष्ठक के अंत तक हटा दें"।

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