इन्सर्ट मोड में <CR> को पूर्ववत करें


21

कभी-कभी इंसर्ट मोड में मैं <CR>गलती से मारा और मुझे बैकस्पेस को कई बार मारना पड़ता है (इंडेंटेशन पर निर्भर करता है) वापस पाने के लिए जहां मैं था।

जैसे

<div>
  <p> This is some text []</p>
</div>

कर्सर है []और मैंने मारा <CR>:

<div>
  <p> This is some text 
  []</p>
</div>

अब मुझे पिछली लाइन पर वापस जाने के लिए दो बार बैकस्पेस को हिट करना होगा (यह मामला इतना बुरा नहीं है लेकिन इसमें बहुत ज्यादा इंडेंट नहीं है)।

क्या आप एक बेहतर तरीका जानते हैं?


1
ctrl+wदो बार काम करने और बहुत आसान लगता है
reergymerej

जवाबों:


10

कैसा रहेगा:

inoremap <C-\> <C-o>:left 0<Cr><BS>

<C-o>एक सामान्य मोड कमांड ( :left 0) निष्पादित करेगा , जो सभी इंडेंट को हटा देगा, यह आपके कर्सर को लाइन की शुरुआत में भी डाल देगा। <BS>आपको अंतिम पंक्ति में वापस लाएगा।

यह थोड़ा "बैकवर्ड J" जैसा है ।

दुर्भाग्यवश, Shift + Enter या Ctrl + Enter मैप करना संभव नहीं लगता है, इसलिए मैं <C-\>"एंटर के पास" के रूप में चुनता हूं ।


"पास में" आपके कीबोर्ड पर निर्भर करता है: ब्रिटेन वालों के पास `` बाएं हाथ की पारी के बगल में है :-)
ट्रिपलेहाउंड

2
के <C-u>बजाय का उपयोग क्यों नहीं <C-o>:left 0<CR>?
जामसेन

@jamessan यह "बैकवर्ड J" के रूप में काम करता है : इसलिए foo<CR>bar<C-\>आपका साथ छोड़ देगा foobar। IMHO यह अधिक उपयोगी है, लेकिन YMMV।
मार्टिन टूरनोइज

सही है, लेकिन मैं जो कह रहा हूं वह यह है <C-u>(यानी, i_CTRL-U ) जैसा होना चाहिए <C-o>:left 0<CR>
जामसेन

1
@jamessan खैर, जो कर्सर की स्थिति पर निर्भर करता है। टाइपिंग foo<CR>bar<C-u>आपको छोड़ देगी foo<CR>(+ कोई भी ऑटो-इंडेंट जो विम ने जोड़ा हो सकता है)। <C-o>:left 0<CR>हमेशा कर्सर की स्थिति की परवाह किए बिना एक ही व्यवहार करेगा।
मार्टिन टूरनोइज

21

मेरे पास यह है vimrc, दूसरा भाग प्रासंगिक है:

inoremap <expr> <silent> <cr> pumvisible() ? "<c-y>" : "<c-g>u<cr>"

यह क्या करता है: हर बार जब आप Enterइन्सर्ट मोड में आते हैं, तो यह "पूर्ववत क्रम को तोड़ देगा, नया बदलाव शुरू करेगा" (देखें h: i_CTRL-G_u)। इसका मतलब है, यदि आप Enterगलती से हिट करते हैं, तो आप अब पिछली सम्मिलित लाइनों को हटाए बिना अपना बदलाव पूर्ववत कर सकते हैं, या तो स्टेटॉक्स के ESC u aसाथ Ctrl-o u, जैसा कि प्रस्तावित है। मूल रूप से, प्रत्येक पंक्ति को अलग से पूर्ववत किया जा सकता है।

स्रोत

EDIT / UPDATE: यदि आप एमएसीएस उर्फ बुराई-मोड में विम अनुकरण का उपयोग करते हैं , तो आप इस पैकेज का उपयोग एक समान प्रभाव के लिए कर सकते हैं ।


अब मैं पहले भाग के बारे में उत्सुक हूं और <c-y>पॉप-अप मेनू से कैसे संबंधित हूं ।
8bittree

2
इस जवाब देखें: vi.stackexchange.com/a/3844/1800Ctrl-yइनसर्ट मोड वर्तमान पॉपअप चयन को पूरा करेगा, और उपरोक्त मानचित्रण को Enterभी पूरा करने की अनुमति देगा ।
वनलेसर

अच्छी चाल। हालाँकि, मैं शायद अंतिम भाग "<c-g>u<cr>"को बदल &paste ? "<cr>" : "<c-g>u<cr>"दूंगा, अन्यथा अगली बार जब आप गलती से HTML की 200 पंक्तियाँ चिपकाएँगे तो आपको इसमें बहुत मज़ा आएगा। :)
lcd047

2
... और स्पष्टीकरण: जब pasteचालू है, मोड मोड मैपिंग अक्षम हैं (विम की मदद के अनुसार)
VanLaser

1
मुझे यह समाधान बेहतर लगता है क्योंकि बैकस्पेस, Ctrl-W और Ctrl-U पर निर्भर अन्य समाधान इस बात पर निर्भर नहीं करते हैं कि backspaceविकल्प कैसे सेट किया गया है।
डबलडाउन

4

जिस तरह से मैं यह कर रहा हूँ Ctrl-wBackspace

Ctrl-wअंतिम शब्द को हटाने के लिए (मैं भूल गया कि यह मानक विम है या नहीं), और चूंकि यह सिर्फ रिक्त स्थान है, यह मुझे लाइन की शुरुआत में वापस ले जाएगा। फिर Backspaceमुझे पिछली पंक्ति में ले जाएगा जहां मैं था।


स्वीट, मुझे Ctrl-wइन्सर्ट-मोड में उपयोग के बारे में पता नहीं था । लेकिन कार्पेटस्मोकर m अभी भी तेज है। इस प्रकार `Ctrl- \` का डिफ़ॉल्ट बंधन उपयोगी नहीं लगता है।
nobe4

1
Ctrl + w "मानक विम"; ;-) देखें: है :help i_CTRL-W। और इसे दो बार दबाने से ट्रिक भी लगती है?
मार्टिन टूरनोइज

1
मैंने अभी सहायता पृष्ठ पर देखा है जो <C-u>अधिक उपयोगी हो सकता है क्योंकि यह नई पंक्ति के सभी वर्णों को हटा देता है
nobe4

1

मेरा यह तरीका है (इन्सर्ट मोड से) UpCtrl-oJDel। संभवतः सबसे कुशल संयोजन नहीं है, लेकिन यह है कि मैं इसके बारे में सोचने की आवश्यकता के बिना क्या कर रहा हूं।


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