VIM में कर्सर के बाद या उसके आसपास का शब्द हटाएं


212

मैं अब VIMTextMate से स्विच कर रहा हूं । मुझे ^+WINSERT मोड बहुत उपयोगी लगा। हालाँकि, मैं कर्सर से पहले न केवल शब्द को हटाना चाहता हूं, बल्कि कर्सर के बाद या उसके बाद का शब्द भी।

मैंने कुछ गोलगप्पे किए, लेकिन केवल एक चीज जो मुझे मिल सकती है, वह ^+Wहै BEFORE कर्सर।

जवाबों:


78

आपको क्या करना चाहिए, कमांड की एक श्रृंखला के लिए एक निश्चित कुंजी का एक अंदाज़ा लगाना है, इस मामले में कमांड आपको सामान्य मोड में छोड़ देंगे, वर्तमान शब्द को हटा देंगे और फिर आपको वापस डालने में डाल देंगे:

:imap <C-d> <C-[>diwi

29
बहुत सारे उपयोगी धार्मिक स्थलों के लिए "h hw"!
klokop

12
<Co> का उपयोग करने के लिए बोनस बोनस अंक। यह नॉर्मल मोड में एक कमांड निष्पादित करता है और सीधे इन्सर्ट में वापस कूदता है, इसलिए कुछ ऐसा imap <C-d> <C-o>diwकाम भी करता है। यह एक पूर्ववत बिंदु भी नहीं बनाता है, जो <Esc> बहुत अधिक हमेशा करता है।
zelk


541

सामान्य स्थिति:

daw : delete the word under the cursor    
caw : delete the word under the cursor and put you in insert mode 

125
यह मेरे लिए यह मददगार है कि मैं इसे डाव समझूं: एक शब्द को हटा दें और एक शब्द को बदल दें।
वेलबोनियो

1
भगवान मैं का उपयोग कर रहे हैं da)और ci)लेकिन यह कभी नहीं सोचा!
स्काई

1
वह सोना जेरी है! सोना! मैंने उन बच्चों को अपनी .vimrcफ़ाइल पर इस तरह मैप किया : nmap <Leader>d daw औरnmap <Leader>c caw
racl101

1
संभवतः यह ध्यान देने योग्य है कि awवस्तु चयन का एक उदाहरण है। आप दृश्य विधा में वस्तु चयन का प्रयास कर सकते हैं कि उनका क्या प्रभाव है: vimdoc.sourceforge.net/htmldoc/motion.html#object-select
crantok

103

मुझे लगता है कि यह सिर्फ है daw

daw - delete a word

1
मुझे पता है कि इसके aलिए एक कमांड है Append text after the cursor [count] times.लेकिन dawकाम कैसे करता है ?
सिंटगमा

3
@REACHUS प्रारंभिक वर्ण dतय करता है कि आप 'डिलीट' होंगे। 'क' एक प्रकार का पैरामीटर है, जो यह निर्दिष्ट करता है कि विलोपन में एक सीमांकक शामिल है। अंत में 'w', एक और parameter-if आप करेंगे- निर्दिष्ट करता है कि एक wordइकाई हटा दी जाएगी।
vlad-ardelean

2
क्या बीच का अंतर है dwऔर daw?
AK_

5
@AK_ देर से प्रतिक्रिया, लेकिन यदि आप एक शब्द के बीच में हैं, dwतो कर्सर से शब्द के अंत तक dawहटा देगा , जबकि एक स्थान के साथ पूरे शब्द को हटा देगा। diwइसके चारों ओर व्हॉट्सएप को छूने के बिना पूरे शब्द को हटा देगा।
दिमितर्स

67

नीचे सामान्य मोड के लिए काम किया गया है: मैं डैन ओल्सन के इस जवाब से सहमत हूं कि आपको अधिकतर विलोपन के लिए सामान्य मोड में होना चाहिए। अधिक विवरण नीचे।

यदि कर्सर शब्द के अंदर है:
diwशब्द के
dawचारों ओर हटाने के लिए शब्द ( रिक्त स्थान शामिल नहीं करता है) (अगले शब्द से पहले रिक्त स्थान शामिल है)।

यदि कर्सर शब्द की शुरुआत में है, तो बस दबाएं dw

यह आंदोलन के लिए सामान्य संख्याओं को जोड़कर गुणा किया जा सकता है, जैसे 2w आगे बढ़ने के लिए 2 शब्द, इसलिए d2w दो शब्द हटाता है।

विधा डालें ^ w
विम में आंदोलन के लिए hjkl का उपयोग करने का विचार यह है कि होम रो पर अपने हाथों को रखने के लिए यह अधिक उत्पादक है। किसी शब्द के अंत में ^ w शब्द को जल्दी से हटाने के लिए बहुत अच्छा काम करता है। यदि आप इंसर्ट मोड में चले गए हैं, तो कुछ टेक्स्ट में प्रवेश किया है और आपने घर-पंक्ति के दर्शन के खिलाफ जाने वाले शब्द के बीच में तीर कुंजियों का उपयोग किया है।
यदि आप सामान्य मोड में हैं और आप जिस शब्द को बदलना चाहते हैं, उसे (डिलीट) के cबजाय बस (परिवर्तन) का उपयोग कर सकते हैं, dयदि आप शब्द को पूरी तरह से बदलना चाहते हैं, और iवापस लाने के लिए बिना प्रेस किए इन्सर्ट मोड को फिर से डालें। टाइपिंग के लिए।


42

क्या आपका मतलब है?

dw

10
पार्टी में देर से, लेकिन dw वर्तमान स्थिति से शब्द के अंत तक हटा देगा, पूरे शब्द को शुरुआत के उपयोग से हटाने के लिए diw या daw
Dvid Silva

1
dwपिछले एक हाइफ़न या अन्य विराम चिह्न को नहीं हटाएगा।
ccpizza

* नोट: यह बफर / अंतिम यान को अधिलेखित कर देगा। यह केवल 'डिलीट' ही नहीं, बल्कि एक 'कट' ऑपरेशन है।
एमडी। मोहिउद्दीन अहमद

23

सामान्य मोड में, दो व्हाट्सएप के बीच सभी वर्णों को हटाने के लिए :

daW

केवल एक शब्द हटाने के लिए:

daw 

20

ऐसा नहीं लगता है कि इसे सम्मिलित करने के तरीके में कोई अंतर्निहित तरीका है, जो सवाल था। कुछ अन्य उत्तर सामान्य मोड के लिए सही हैं, साथ ही यह इंगित करते हैं कि सम्मिलित मोड में कार्यक्षमता जोड़ने के लिए एक कस्टम मानचित्रण बनाया जा सकता है।

ईमानदारी से, आपको अपना अधिकतर काम सामान्य मोड में करना चाहिए। ^ डब्ल्यू के बारे में जानना आसान है, लेकिन मुझे यकीन नहीं है कि मैं ऐसी स्थिति के बारे में सोच सकता हूं जहां मैं इसे सामान्य मोड में जाने के लिए esc की तुलना में करूंगा और मेरे निपटान में अधिक शक्तिशाली विलोपन कमांड है।

विम इस तरह से कई अन्य संपादकों (TextMate सहित) से बहुत अलग है। यदि आप इसे उत्पादक रूप से उपयोग कर रहे हैं, तो आप संभवतः पाएंगे कि आप सम्मिलित मोड में बहुत अधिक समय नहीं बिताते हैं।


1
मैं ^ वा का उपयोग करता हूं, ज्यादातर जब मैं एक शब्द को गलत करता हूं - तो वापस जाने और लापता पत्र / आदि जोड़ने के बजाय, मैं बस पूरी चीज को हटा देता हूं और फिर से शुरू करता हूं .. सामान्य-मोड में जाकर बस एक शब्द को नष्ट करने जैसा लगता है कुछ कीस्ट्रोक्स के लिए .. उदाहरण के लिए, "उदाहरण wrd [^ w] शब्द" "उदाहरण wrd [^ c] [dw] [i] शब्द" की तुलना में कीस्ट्रोक्स कम है
dbr

1
dbr: वह मूल ^ W व्यवहार को करने के लिए नहीं कह रहा था, हालांकि यह विम का समर्थन करता है। वह इन्सर्ट मोड में रहते हुए बीच में एक शब्द को डिलीट करने के लिए कह रहा था, जो कि विम के लिए एक अजीब स्थिति है और इसलिए ऐसा करने की कोई आज्ञा नहीं है। यदि आप वास्तव में कार्यक्षमता से वंचित कर सकते हैं तो आप ^ Q से <Esc> ciw को बाँध सकते हैं। ओह, यह भी [^] [^ c] [dw] [i] निरर्थक है, आप [^ c] [ciw] का उपयोग कर सकते हैं
bfabry '

4
"ऐसा नहीं लगता है कि वहाँ एक रास्ता है ..." - वैसे तो इसके अनगिनत तरीके हैं - बस कोई अंतर्निहित तरीका नहीं है, afaik। हालांकि मैं इन्सर्ट मोड बनाम नॉर्मल मोड पर डैन के कथन से पूरी तरह सहमत हूँ, आप निश्चित रूप से एक इन्सर्ट मोड मैपिंग को परिभाषित कर सकते हैं, ": imap मदद करें" जो कि आप जो भी हासिल करना चाहते हैं, उसे करें यदि आपको वास्तव में इन्सर्ट मोड में कार्यक्षमता की आवश्यकता है।
user55400

13

यदि आपके कर्सर का उपयोग हो रहा है diw
, तो पूरे शब्द को हटाने के लिए, आपके कर्सर पर पूरे शब्द को हटाने के लिए और आपको डालने के मोड में उपयोग करने के लिए ciw
यदि आप संपूर्ण शब्द को हटाना नहीं चाहते हैं, लेकिन जहां से आप हैं, वहां से हटा देंdw/cw


8

चूँकि किसी शब्द को हटाने के बहुत सारे तरीके हैं, तो आइए हम उन्हें स्पष्ट करते हैं।

मान लें कि आप संपादित करते हैं:

foo-bar quux

और कर्सर को 'बार' में 'ए' पर होने पर एक कमांड दें:

foo-bquux  # dw:  letters then spaces right of cursor
foo-quux   # daw: letters on both sides of cursor then spaces on the right 
foo- quux  # diw: letters on both sides of cursor
foo-bquux  # dW:  non-whitespace then spaces right of cursor
quux       # daW: non-whitespace on both sides of cursor then spaces on the right
 quux      # diW: non-whitespace on both sides of cursor

5

सम्मिलित मोड में दुर्भाग्य से ऐसा कोई आदेश नहीं है। VIM में, कर्सर के तहत पूरे शब्द को हटाने के लिए आप viwdNORMAL मोड में टाइप कर सकते हैं । जिसका अर्थ है " V isual-block I nner W ord D elete"। Wविराम चिह्न को शामिल करने के लिए एक ऊपरी मामले का उपयोग करें ।


3

स्वीकार किए गए शब्दों को हटाने के शब्दों को दोहराने की कोशिश करते समय स्वीकार किए गए उत्तर विफल हो जाते हैं, इस समाधान को इसके बजाय आज़माएं:

" delete current word, insert and normal modes
inoremap <C-BS> <C-O>b<C-O>dw
noremap <C-BS> bdw

यह सीटीआरएल-बैकस्पेस को मैप करता है, जो सामान्य मोड में भी काम कर रहा है।


मुझे यह उत्तर केवल इसलिए अच्छा लगा क्योंकि यह सामान्य मोड में भी काम करता है।
शिवाबुध

2

कर्सर से पहले वर्णों की एक निश्चित राशि को हटाने के लिए, आप X का उपयोग कर सकते हैं । कर्सर के बाद कुछ निश्चित शब्दों को हटाने के लिए , आप dw का उपयोग कर सकते हैं (उदाहरण के लिए 3 शब्दों के लिए 3dw का उपयोग करके कई शब्द हटाए जा सकते हैं)। सामान्य रूप से कर्सर को हटाने के लिए, आप daw का उपयोग कर सकते हैं।


2

पुराने vi में, bकर्सर को कर्सर से पहले शब्द की शुरुआत में wले जाता है, कर्सर को कर्सर के बाद शब्द की शुरुआत में ले जाता है, कर्सर को कर्सर के बाद शब्द eके अंत में ले जाता है और कर्सर को शब्द के अंत में dwहटा देता है।

यदि आप टाइप करते हैं wbdw, तो आप कर्सर के चारों ओर शब्द हटाते हैं, भले ही कर्सर शुरुआत में हो या शब्द के अंत में हो। ध्यान दें कि एक शब्द के बाद व्हॉट्सएप हटाए जाने वाले शब्द का हिस्सा होने के लिए विचारक हैं।


2

"पहले" और "बाद" के अपने उपयोग के बारे में बिल्कुल निश्चित नहीं हैं, लेकिन क्या आपने कोशिश की है

dw

?

संपादित करें: मुझे लगता है कि आप सम्मिलित मोड में उपयोग करने के लिए कुछ देख रहे हैं। अजीब तरह से, डॉक्स में पाया जाने वाला कुछ भी नहीं है, ctrl-w लगता है कि सब कुछ है।


2

मैंने दो मैपिंग की, ताकि मुझे इन्सर्ट और आउट मोड में स्थिरता मिल सके।

:map <'Key of your choice'> caw

:imap <'Key of your choice'> <'Esc'> caw


0

मैं न केवल कर्सर से पहले शब्द को हटाना चाहता हूं, बल्कि कर्सर के बाद या उसके आसपास का शब्द भी।

उस स्थिति में ओपी द्वारा प्रस्तावित समाधान (अर्थात उपयोग करके <c-w>) देने के लिए स्वीकृत उत्तर के साथ जोड़ा जा सकता है:

inoremap <c-d> <c-o>daw<c-w>

वैकल्पिक रूप से (छोटा समाधान):

inoremap <c-d> <c-o>vawobd

नमूना इनपुट:

word1 word2 word3 word4
               ^------------- Cursor location

आउटपुट:

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