tl; dr: बैकस्पेस कार्य को अन्य कार्यक्रमों की तरह करने के लिए इसे अपने vimrc में जोड़ें:
set backspace=indent,eol,start
लंबा जवाब
हालांकि डिफ़ॉल्ट व्यवहार आश्चर्यजनक हो सकता है, बैकस्पेस "काम नहीं कर रहा" को एक विशेषता माना जा सकता है ; यह आपको गलती से इंडेंटेशन को हटाने से रोक सकता है, और बहुत अधिक टेक्स्ट को वर्तमान लाइन और / या इंसर्ट की शुरुआत तक सीमित करके हटा सकता है।
:help 'backspace'
हमें बताइये:
Influences the working of `<BS>`, `<Del>`, `CTRL-W` and `CTRL-U` in Insert
mode. This is a list of items, separated by commas. Each item allows
a way to backspace over something:
value effect
indent allow backspacing over autoindent
eol allow backspacing over line breaks (join lines)
start allow backspacing over the start of insert; CTRL-W and CTRL-U
stop once at the start of insert.
तो इन मूल्यों का वास्तव में क्या मतलब है?
इंडेंट
विम कई फ़िल्टिप्स के लिए स्वचालित इंडेंटेशन जोड़ता है; डिफ़ॉल्ट रूप से, आपको
इस पर बैकस्पेस देने की अनुमति नहीं है ; उदाहरण के लिए, 'ऑटोइंडेंटेशन' के नियमों को कुछ हद तक सूक्ष्म माना जाता है, अगर हम इसे टाइप करेंगे (जहाँ where कर्सर है):
if :; then
█
बैकस्पेसिंग काम नहीं करेगी।
लेकिन अगर हम तो एक कमांड और जोड़ना होगा fi
, और वापस ऊपर जाना है, हम कर रहे हैं
खरोज दूर करने के लिए अनुमति दी:
if :; then
█:
fi
ऐसा इसलिए है क्योंकि पहले उदाहरण में, विम ने यह निर्धारित किया कि जब आप Enter दबाते हैं तो इसे 1 इंडेंटेशन का स्तर जोड़ना चाहिए; लेकिन दूसरे उदाहरण में, विम ऑटोइंडेंट कुछ भी नहीं था, यह सिर्फ टैब वर्ण या कुछ रिक्त स्थान है।
और देखें :help 'autoindent'
ईओएल
यह सबसे स्पष्ट होना चाहिए, बैकस्पेस को दबाने से ईओएल मार्कर ( \n
या \r\n
) को भी हटा दिया जाता है ; यदि अक्षम किया जाता है, तो बैकस्पेस कुछ भी नहीं करेगा यदि आप ईओएल मार्कर को हटाने की कोशिश करते हैं।
प्रारंभ
इसका मतलब है कि आप केवल उस पाठ को हटा सकते हैं जिसे आपने डालने के मोड में आने के बाद डाला है, और आप पहले डाला गया कोई भी पाठ हटा नहीं सकते।
तो डिफ़ॉल्ट सेटिंग क्या है?
मैंने इसे खिड़कियों में जीवीआईएम का उपयोग करते हुए देखा। हालांकि अधिकांश लिनक्स सिस्टम में टर्मिनल से VIM का उपयोग करते समय बैकस्पेस अपेक्षित रूप से काम करता है।
इसका कारण यह है क्योंकि कई लिनक्स डिस्ट्रो के जहाज पूर्व-निर्मित विम्के फाइलों के साथ हैं जो कुछ सामान्य विकल्प सेट करते हैं। मेरे आर्क लिनक्स सिस्टम पर उदाहरण के लिए मेरे पास /usr/share/vim/vimfiles/archlinux.vim
है:
set nocompatible
set backspace=indent,eol,start
" ... and a few more...
यदि आप Windows पर Vim को स्थापित करते हैं, तो डिफ़ॉल्ट डिफ़ॉल्ट vimrc और gvimrc का उपयोग करना है जो Vim जहाजों के साथ है।
विम डिफ़ॉल्ट लिए एक खाली मान है backspace
। आर्क लिनक्स, डेबियन, सेंटोस या $other_distro
डिफ़ॉल्ट अलग हो सकते हैं।
सामान्य स्थिति
यह प्रश्न इन्सर्ट मोड में बैकस्पेस के बारे में है, लेकिन मुझे बैकस्पेस के बारे में सामान्य मोड में कुछ संक्षिप्त टिप्पणी करने दें।
सामान्य मोड में, बैकस्पेस कार्य करता है h
, यह केवल बाईं ओर जाता है।
डिफ़ॉल्ट रूप से, बैकस्पेस पिछली पंक्ति में जाएगा यदि एक लाइन की शुरुआत में (जैसे कि यदि eol
था backspace
); आप ध्वज के 'whichwrap'
माध्यम से विकल्प के साथ इस व्यवहार को नियंत्रित कर सकते हैं b
(डिफ़ॉल्ट रूप से सक्षम)।
आप X
कमांड को मैप करके बैकस्पेस डिलीट कैरेक्टर्स भी बना सकते हैं :
nnoremap <BS> X
X
(और के साथ हटाएंx
), लेकिन अक्सर आप वास्तव में क्या करना चाहते थेdb
उदाहरण के लिए शब्द की शुरुआत तक हटाना, याdaw
पूरे शब्द को हटाना आदि। यदि आपके पास बैकस्पेस उपलब्ध है, तो आप इसका उपयोग करके जोखिम उठाते हैं। आवश्यकता से अधिक मामलों में उप-कुंजी को अपनाना।