इंसर्ट मोड में बैकस्पेस कुंजी काम क्यों नहीं करती है?


146

backspaceकुंजी के साथ इन्सर्ट मोड में वर्णों को हटाने की कोशिश कभी-कभी काम की नहीं लगती। मैं backspace कभी-कभी कर सकता हूं , लेकिन अन्य समय में यह कुछ भी नहीं करता है; कर्सर बाईं ओर नहीं जाता है, और बिल्कुल कुछ भी नहीं होता है।

मैंने विंडोज में जीवीएम का उपयोग करके इस पर ध्यान दिया। backspaceके रूप में हालांकि अधिकतर Linux सिस्टम में टर्मिनल से विम का उपयोग करते समय उम्मीद काम करने के लिए लगता है।

  1. ऐसा क्यों होता है?
  2. मैं backspaceहमेशा की तरह कुंजी हटाने वाले अक्षर कैसे बना सकता हूं ?
  3. क्या यह व्यवहार एक विशेषता के रूप में है? दूसरे शब्दों में: क्या backspaceडालने के मोड में वर्णों को हटाने के लिए बेहतर विकल्प हैं ?

हालांकि नीचे दिया गया उत्तर आपकी समस्या को सही ढंग से हल करता है, मैंने पाया है कि तीर कुंजी या बैकस्पेस जैसे अक्षम करने से आपको चीजों को अधिक सही तरीके से करने में मदद मिलती है। विम में बैकस्पेस के साथ किया जाता है X(और के साथ हटाएं x), लेकिन अक्सर आप वास्तव में क्या करना चाहते थे dbउदाहरण के लिए शब्द की शुरुआत तक हटाना, या dawपूरे शब्द को हटाना आदि। यदि आपके पास बैकस्पेस उपलब्ध है, तो आप इसका उपयोग करके जोखिम उठाते हैं। आवश्यकता से अधिक मामलों में उप-कुंजी को अपनाना।
शहबाज

5
@ शहबाज मैं असहमत: इन्सर्ट मोड में बैकस्पेस की का उपयोग करके मामूली सुधार करने में सक्षम होने के लिए समझ में आता है। मैं इस बात से सहमत हूं कि व्यक्ति को सामान्य मोड कमांड्स का उपयोग करना सीखना चाहिए, लेकिन यह मामूली बदलावों के लिए इन्सर्ट मोड में बैकस्पेस का उपयोग करने के लिए अयोग्य नहीं है।
कार्ल यंगवे लर्वग

3
@ KarlYngveLervåg, बैकस्पेस के मामले में मैं सहमत हूं (वास्तव में मेरे पास खुद को अक्षम नहीं किया है)। हालाँकि, ऐसा लगता है कि ओपी के पास बैकस्पेस का डिफ़ॉल्ट व्यवहार है जो लाइन की शुरुआत के साथ उदाहरण के लिए काम नहीं करता है, लेकिन लाइन के भीतर काम करता है। फिर भी, ओपी के पास बैकस्पेस की तुलना में बेहतर विकल्प हैं। उदाहरण के लिए, पिछली पंक्ति के बैकस्पेसिंग के बजाय, कोई भी उपयोग कर सकता है Jजो व्हाट्सएप की देखभाल करता है। संक्षेप में, लेखन के दौरान त्वरित टाइपो फिक्स के लिए बैकस्पेस ठीक है, लेकिन इसके अलावा अन्य बेहतर विकल्प हैं।
शाहबाज़

1
कई लोगों की समस्या प्रति se फीचर से असहमति नहीं है, लेकिन यह एकमात्र संपादक नहीं है जो वे उपयोग करते हैं। चूंकि वे कई संपादकों का उपयोग करते हैं, इसलिए यह बैक-स्पेस से संबंधित प्रतिमानों को स्विच करने के लिए काउंटर-सहज है, इसलिए वे विम विशेषताओं का सबसेट पसंद करते हैं।
j riv

यदि आपने vim-faq स्थापित किया है , तो आप वहां ऑफ़लाइन उत्तर प्राप्त कर सकते हैं: :h vim-faqऔर खोज करें /backspace। टैग को याद रखना कठिन है :h faq-12.26
होट्सचेक

जवाबों:


178

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

1
मुझे लगता है कि "_Xयह "अधिक स्वाभाविक" व्यवहार होगा <BS>
हौलेथ

2
वर्थ नोटिंग कि डिफ़ॉल्ट व्यवहार के साथ लगभग कोई वितरण जहाज नहीं। केवल एक मैंने देखा है msys2 और वह शायद एक निर्णय नहीं था लेकिन उसके अविकसित होने की प्रकृति थी।
j riv

5

बस किसी को भी <BS>विंडोज पर ConEmu का उपयोग करने के लिए समझाने योग्य व्यवहार का अनुभव नहीं होता है, तो आपको <BS>कुंजी को फिर से भरना पड़ सकता है :

inoremap <Char-0x07F> <BS>
nnoremap <Char-0x07F> <BS>

अधिक जानकारी


1
set backspace=2

v5.4 और पहले के साथ प्रयोग किया जाता है। मेरे लिए मैक पर काम किया।

मैक पर ऐसा लगता है कि मेरे पास v3.2 है:

$ bash --version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin18)
Copyright (C) 2007 Free Software Foundation, Inc.

3.2 के पिछले सभी संस्करण GNU जनरल पब्लिक लाइसेंस v3 (GPLv3) का उपयोग करते हैं, जो Apple समर्थन के पक्ष में नहीं है। इस बारे में रेडिट पर एक चर्चा यहाँ है

आप के साथ नवीनतम बैश में अपग्रेड कर सकते हैं:

brew install bash

यह यहाँ प्रकाश डाला प्रोग्राम पूरा होने का लाभ लेने के लिए अनुमति देता है


0

यदि set backspace=indent,eol,startआपकी अंतिम पंक्ति है vimrc, तो कोई भी समाधान काम नहीं करेगा।

इसके बाद एक और नियम जोड़ें, जैसे:

set ruler

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