मैं विम संपादक से कैसे बाहर निकलूं?


3760

मैं फंस गया हूं और बच नहीं सकता। इसे कहते हैं:

"type :quit<Enter> to quit VIM"

लेकिन जब मैं टाइप करता हूं कि यह केवल ऑब्जेक्ट बॉडी में दिखाई देता है।


131
क्या आप सिर्फ VIM छोड़ने की कोशिश कर रहे हैं? यदि यह मामला है, तो "बच" दबाएं और फिर टाइप करें: 'q'
पॉप

47
बृहदान्त्र को मत भूलना ! आपको टाइप करना चाहिए :quitऔर फिर [ENTER]कुंजी को हिट करना चाहिए ।
फरिहंद

88
यह वास्तव में विम की मूल बातें जानने के लिए आसान है, और यह आपके सिस्टम में बनाया गया है। टर्मिनल प्रकार में "विम्मुटोर"। 25 मिनट बाद आप अपने सामान्य पाठ संपादक की तुलना में तेजी से आगे बढ़ेंगे!
मार्क रॉबसन

4
चेक यहाँ अधिक आदेशों।
टोनी

77
git commitभविष्य में आपको वीम भेजने से रोकने के लिए: git config --global core.editor="nano"
टॉम केली

जवाबों:


4895

Esc"सामान्य मोड" दर्ज करने के लिए कुंजी मारो । फिर आप :"कमांड-लाइन मोड" दर्ज करने के लिए टाइप कर सकते हैं । :स्क्रीन के नीचे एक कोलन ( ) दिखाई देगा और आप निम्न में से किसी एक कमांड में टाइप कर सकते हैं। एक कमांड निष्पादित करने के लिए, Enterकुंजी दबाएं।

  • :q (पद के लिए कम :quit)
  • :q!बचत के बिना छोड़ने के लिए (कम के लिए :quit!)
  • :wq लिखना और छोड़ना
  • :wq! लिखने और छोड़ने के लिए भले ही फ़ाइल केवल पढ़ने की अनुमति हो (यदि फ़ाइल में लिखने की अनुमति नहीं है: बल लिखें)
  • :x लिखने और छोड़ने के लिए (समान :wq, लेकिन परिवर्तन होने पर केवल लिखें)
  • :exitलिखने और बाहर निकलने के लिए (समान :x)
  • :qaसभी को छोड़ना (लघु के लिए :quitall)
  • :cq बचत के बिना छोड़ दें और विम को गैर-शून्य त्रुटि दें (यानी त्रुटि के साथ बाहर निकलें)

आप ZZसहेजने और छोड़ने (समान :x) या ZQकेवल छोड़ने के लिए टाइप करके ( "जैसा है)" सीधे "सामान्य मोड" से Vim से बाहर निकल सकते हैं :q!। (ध्यान दें कि मामला यहाँ महत्वपूर्ण है। ZZऔर zzइसका मतलब यह नहीं है।)

विम के पास व्यापक सहायता है - जिसे आप :helpकमांड के साथ एक्सेस कर सकते हैं - जहां आप अपने सभी सवालों के जवाब और शुरुआती लोगों के लिए एक ट्यूटोरियल पा सकते हैं।


15
जब तक आप एस्कैप को हटाते हैं या आपके .vimrc में एक अजीब मैपिंग नहीं होती है, तब तक इसे निश्चित रूप से करना चाहिए। अगर linux टाइप xev पर है और सुनिश्चित करें कि बच निकलने पर आपको मिलने वाला की-टाइप है।
dirvine

17
याद रखें कि यदि आप Esc (मेरी तरह क्योंकि TotalTerminal में है) का उपयोग नहीं कर सकते हैं तो आप ctrl + c का उपयोग कर सकते हैं। vim.wikia.com/wiki/Avoid_the_escape_key
dotnetCarpenter

25
:x== ZZलेकिन :x! = :wq:xफ़ाइल लिखें iff फ़ाइल बदल गई है, तो :wqफ़ाइल हमेशा लिखें (मामले का उपयोग करते समय inotify)।
होलेथ

36
ईमानदार होने के लिए, मेरे पास विम का उपयोग करने की तुलना में विम की सहायता प्रणाली का उपयोग करने का कठिन समय है, और ज्यादातर त्वरित रेफरी कार्ड और ऑनलाइन प्रलेखन पर भरोसा करते हैं।
bgvaughan

18
यदि आपके पास फ़ाइल पर अनुमति नहीं है, लेकिन sudo अनुमतियाँ हैं:w ! sudo tee %
tvlooy

188

चित्र एक हजार यूनिक्स कमांड और विकल्पों के लायक हैं:

यहां छवि विवरण दर्ज करें

मैं प्रत्येक सेमेस्टर में अपने छात्रों को यह आकर्षित करता हूं और वे vi को बाद में समझ लेते हैं।

vi केवल तीन राज्यों के साथ एक परिमित राज्य मशीन है।

शुरू करने पर, vi कमोड मोड में जाता है, जहां आप छोटे, कुछ वर्ण कमांड टाइप कर सकते हैं, नेत्रहीन । तुम जानते हो कि तुम क्या कर रहे हो; यह शौकीनों के लिए नहीं है।

जब आप वास्तव में पाठ को संपादित करना चाहते हैं, तो आपको कुछ एक-वर्ण कमांड के साथ INSERT मोड पर जाना चाहिए:

  • i: कर्सर के स्थान पर INSERT पर जाएं
  • I: लाइन की शुरुआत में INSERT मोड पर जाएं
  • a: कर्सर के बाद परिशिष्ट
  • A: लाइन के अंत में संलग्न करें
  • ओ: वर्तमान लाइन के नीचे एक नई लाइन खोलें
  • ओ: वर्तमान लाइन के स्थान पर एक नई लाइन खोलें

अब, इस सवाल का जवाब: बाहर निकल रहा है।

आप EX मोड से vi से बाहर निकल सकते हैं:

  • q: यदि आपने कोई संशोधन नहीं किया है, या उन्हें पहले से सहेज लिया है
  • q !: किसी भी संशोधन को अनदेखा करता है और छोड़ देता है
  • wq: बचाओ और छोड़ो
  • x: यह wq के बराबर है

wऔर xफ़ाइल नाम पैरामीटर स्वीकार करें। यदि आपने vi को फ़ाइल नाम के साथ शुरू किया है, तो आपको इसे यहां फिर से देने की आवश्यकता नहीं है।

अंत में, सबसे महत्वपूर्ण: आप EX मोड तक कैसे पहुंच सकते हैं?

EX मोड लंबे कमांड के लिए है जिसे आप स्क्रीन के निचले लाइन पर टाइप करते हुए देख सकते हैं। COMMAND मोड से, आप कोलन को पुश करते हैं :, और एक कॉलन नीचे की लाइन पर दिखाई देगा, जहाँ आप उपरोक्त कमांड टाइप कर सकते हैं।

INSERT मोड से, आपको ESC, यानी एस्केप बटन, COMMAND मोड पर जाना होगा, और फिर: EX मोड पर जाने की आवश्यकता है।

यदि आप अनिश्चित हैं, तो ESC को धक्का दें और यह आपको कमांड मोड में लाएगा।

तो, मजबूत तरीका ESC -: - x-Enter है जो आपकी फ़ाइल को बचाता है और क्विट करता है।


5
धन्यवाद, छवि बहुत मददगार है। हालाँकि, मेरे लिए wपूर्व से कमांड मोड में परिवर्तन नहीं है, लेकिन Escकरता है। मैं क्या गलत कर रहा हूं?
निक वोल्किन

2
यदि आप w-Enter लिखते हैं जो आपकी फ़ाइल को बचाता है और COMMAND मोड पर वापस जाता है। मैंने इसे कमांड्स को सेव एंड लीव की पूरी तस्वीर रखने के लिए लिखा था।
गेर्गेले

3
ओह, तो आपका मतलब है :w। तब यह सही समझ में आता है। वैसे, क्या डिस्क से पुनः लोड करने के लिए एक कमांड है (जो कि परिवर्तनों को वापस करने के लिए है लेकिन फ़ाइल को बंद नहीं करना है)? यदि हां, तो यह wआरेख के बगल में हो सकता है।
निक वोल्किन

2
@ सही मायने में मैं सिर्फ भ्रम का पता लगा लिया! डॉक्स से, सामान्य मोड को कमांड मोड भी कहा जाता है ! तो, कमांड मोड! = कमांड-लाइन मोड। वाह!
jpaugh

2
@NickVolynkin डिस्क से पुनः लोड करने का आदेश है :e(या अधिक संभावना है :e!क्योंकि यह आपको बिना सहेजे गए परिवर्तनों के बारे में चेतावनी देगा !)
JDS

177

इससे पहले कि आप एक आदेश डालें, मारा Escकुंजी । आपके द्वारा दर्ज करने के बाद, Returnपुष्टि करने के लिए हिट करें।

Escवर्तमान कमांड को पूरा करता है और विम को सामान्य मोड में स्विच करता है । अब यदि आप दबाते हैं :, तो स्क्रीन :के नीचे दिखाई देगा । यह पुष्टि करता है कि आप वास्तव में एक कमांड टाइप कर रहे हैं और फाइल को संपादित नहीं कर रहे हैं।

अधिकांश कमांड में संक्षिप्त रूप होते हैं, ब्रैकेट में संलग्न वैकल्पिक भाग के साथ c[ommand]:।

Ands * ’के साथ चिह्नित कमांड विम-ओनली (वी में लागू नहीं) हैं।

सुरक्षित-छोड़ें (असफल परिवर्तन होने पर विफल हो जाते हैं):

  • :q[uit] वर्तमान विंडो से बाहर निकलें । यदि यह अंतिम विंडो है तो Vim से बाहर निकलें। यह तब विफल हो जाता है जब वर्तमान बफ़र में परिवर्तन किए गए हैं ।
  • :qa[ll]* सभी विंडो बंद करें और विम, जब तक कि कुछ बफ़र्स नहीं हैं जिन्हें बदल दिया गया है।

शीघ्र-छोड़ें (संकेतित परिवर्तन होने पर संकेत देते हैं)

  • :conf[irm] q[uit]* छोड़ें, लेकिन कुछ बफ़र होने पर संकेत दें, जिन्हें बदल दिया गया है।
  • :conf[irm] xa[ll]* सभी परिवर्तित बफ़र्स लिखें और विम से बाहर निकलें। जब कुछ बफ़र्स नहीं लिखे जा सकते, तो एक संकेत दें।

परिवर्तन लिखें और छोड़ें:

  • :wqवर्तमान फ़ाइल लिखें (भले ही इसे बदला नहीं गया था) और छोड़ दिया। जब फ़ाइल केवल-पढ़ने के लिए या बफ़र में नाम न हो, तो लेखन विफल हो जाता है। :wqa[ll]* सभी खिड़कियों के लिए।
  • :wq!वही, लेकिन केवल पढ़ने के लिए फ़ाइलें भी लिखता है। :wqa[ll]!* सभी खिड़कियों के लिए।
  • :x[it], ZZ( विवरण सहित ) फ़ाइल को केवल तभी लिखें यदि इसे बदल दिया गया था और छोड़ दिया गया था , :xa[ll]* सभी खिड़कियों के लिए।

परिवर्तन छोड़ें और छोड़ें:

  • :q[uit]! ZQ* लेखन के बिना छोड़ें, यह भी कि जब दृश्यमान बफ़र्स में परिवर्तन हो। जब छिपे हुए बफ़र्स बदले जाते हैं तो बाहर नहीं निकलता है।
  • :qa[ll]!*, :quita[ll][!]* छोड़ो विम, बफ़र्स के सभी परिवर्तन (छिपे हुए सहित) खो गए हैं।

Returnआदेश की पुष्टि करने के लिए दबाएँ ।

यह उत्तर सभी Vim लिखने और आदेशों और तर्कों को छोड़ने का संदर्भ नहीं देता है। दरअसल, उन्हें विम दस्तावेज में संदर्भित किया जाता है ।

विम के पास व्यापक अंतर्निहित मदद है, Esc:helpReturnइसे खोलने के लिए टाइप करें।

यह उत्तर अन्य से प्रेरित था , मूल रूप से @dirvine द्वारा लिखित और अन्य SO उपयोगकर्ताओं द्वारा संपादित किया गया था। मैंने विम संदर्भ, एसओ टिप्पणियों और कुछ अन्य स्रोतों से अधिक जानकारी शामिल की है। Vi और विम के लिए अंतर भी परिलक्षित होता है।


81

यदि आप विम में बचत किए बिना छोड़ना चाहते हैं और विम के पास एक शून्य-शून्य निकास कोड है, तो आप उपयोग कर सकते हैं :cq

मैं हर समय इसका उपयोग करता हूं क्योंकि मुझे पिंकी शिफ्ट के लिए परेशान नहीं किया जा सकता है !। मैं अक्सर विम को पाइप करता हूं जिसे एक फाइल में सहेजने की आवश्यकता नहीं है। हमारे पास काम पर एक अजीब एसवीएन आवरण भी है जो एक चेकइन को निरस्त करने के लिए गैर-शून्य मान के साथ बाहर निकलना चाहिए।


19
मैं यह भी एक कमिट, या visudo, या crontab, को खत्म करने के लिए इसका उपयोग करता हूँ ...
जोश ली

:q!एक गैर-शून्य संदेश के लिए git की जाँच न करने और गैर-शून्य निकास कोड न होने के बाद, काम के साथ एक git कमिट को रद्द करना ।
मोपेट 10

मुझे पता है कि यह काम करता है, यह सिर्फ इतना है: cq को शिफ्ट कुंजी की आवश्यकता नहीं है। :-)
सूयेंस

47

यह विम से बाहर निकलने के सबसे खराब स्थिति के लिए है यदि आप बस चाहते हैं, तो पता नहीं है कि आपने क्या किया है और आपको परवाह नहीं है कि आपके द्वारा खोली गई फ़ाइलों का क्या होगा।

Ctrl-cEnterEnterviEnterCtrl-\Ctrl-n:qa!Enter

यह आपको अधिकांश समय निकालना चाहिए।

कुछ दिलचस्प मामले जहां आपको इस तरह की आवश्यकता है:

  • iCtrl-ovg (आप इन्सर्ट मोड डालें, फिर विजुअल मोड और फिर ऑपरेटर पेंडिंग मोड)

  • QappendEnter

  • iCtrl-ogQCtrl-r=Ctrl-k (इस केस के लिए पोरेज को धन्यवाद)

  • :set insertmode(यह एक ऐसा मामला है जब Ctrl-\Ctrl-nआप सामान्य मोड में लौटते हैं)


संपादित करें: उपरोक्त मामलों के कारण यह उत्तर सही किया गया था। यह हुआ करता था:

EscEscEsc:qa!Enter

हालाँकि, यदि आपने Ex मोड में प्रवेश किया है तो यह काम नहीं करता है। उस स्थिति में आपको करना होगा:

viEnter:qa!Enter

तो "मैं नहीं जानता कि मैंने क्या किया है और मैं कुछ भी नहीं बचाना चाहता, मैं अभी बाहर चाहता हूँ!" होने वाला

viEnterEscEscEsc:qa!दर्ज


6
@cavalcade यह सुनिश्चित करने का एक अत्यंत सामान्य तरीका है कि संपादक सामान्य मोड में है और फिर सुरक्षित रूप से बाहर निकल रहा है। सामान्य उपयोग में आप सभी की जरूरत है :qया:wq
दान Passaro

6
पर्याप्त सामान्य नहीं! अगर मैं (एक शुरुआत) टाइप i<Ctrl-O>gQ<Ctrl-R>=<Ctrl-K>करूँ तो क्या होगा ?
पोर्स

@ टेस्ट केस के लिए धन्यवाद! कुछ अन्य परीक्षण मामले भी हैं जो यह साबित करते हैं कि मूल विधि कमजोर थी। मैंने अब और अधिक सामान्य होने का उत्तर संपादित किया।
हिक्की नास्की

@HeikkiNaski मेरे लिए कम से कम मैं (अभिव्यक्ति रजिस्टर से बचने के लिए) और साथ ही Ctrl-C के बाद दर्ज की जरूरत है
porges

40

यदि आपको Vim को आसान मोड से बाहर निकलने की आवश्यकता है ( -yविकल्प का उपयोग करते समय) तो आप Ctrl+ मारकर सामान्य Vim मोड में प्रवेश कर सकते हैं Lऔर फिर कोई भी सामान्य निकास विकल्प काम करेगा।


7
फिर भी एक और विकल्प: आप Ctrl+OINSERT मोड को अस्थायी रूप से छोड़ने के लिए उपयोग कर सकते हैं फिर दर्ज करें :q। इस संयोजन के साथ ट्रिक सामान्य कमांड के साथ-साथ सिंगल कमांड को निष्पादित करने और INSERT मोड पर वापस जाने के लिए उपयोगी है।
एंड्रे स्टारोडुबत्सेव

28

विम के ऑपरेशन के तीन मोड हैं: इनपुट मोड, कमांड मोड और एक्स मोड।

इनपुट मोड - जो कुछ भी आप टाइप करते हैं, सभी कीस्ट्रोक्स स्क्रीन पर गूँजते हैं।

कमांड मोड या एस्केप मोड - इस मोड में जो कुछ भी आप टाइप करते हैं उसकी व्याख्या एक कमांड के रूप में की जाती है।

पूर्व मोड - यह एक और संपादक है, पूर्व। यह एक लाइन एडिटर है। यह प्रति पंक्ति या लाइनों की एक श्रृंखला के आधार पर काम करता है। इस मोड में, :स्क्रीन के निचले भाग में दिखाई देता है। यह पूर्व संपादक है।

विम से बाहर निकलने के लिए, आप पूर्व मोड में या कमांड मोड में रहने के दौरान बाहर निकल सकते हैं। जब आप इनपुट मोड में होते हैं तो आप विम से बाहर नहीं निकल सकते।

एक्स मोड से बाहर निकलना

  1. आपको यह सुनिश्चित करने की आवश्यकता है कि आप कमांड मोड में हैं। ऐसा करने के लिए, बस Escकुंजी दबाएं।

  2. :कुंजी दबाकर पूर्व मोड पर जाएं

  3. बाहर निकलने के लिए पूर्व मोड में निम्नलिखित में से किसी भी संयोजन का उपयोग करें:

    :q- पद छोड़ना :q!- बिना बचत के छोड़ देना :wq- बचाना या छोड़ देना या लिखना और छोड़ देना :wq!- जैसा कि wq, लेकिन केस फाइल परमिशन में बलपूर्वक लिखा जाना :x- आसानी से लिखना और छोड़ना :qa- सभी को छोड़ दें। उपयोगी जब कई फाइलें खोली जाती हैं जैसे:vim abc.txt xyz.txt

कमांड मोड से बाहर निकलना

  1. भागने की कुंजी दबाएँ। यदि आप कमांड मोड में हैं तो संभवत: आपने पहले ही ऐसा कर लिया है।

  2. प्रेस राजधानी ZZ ( shift zz) - सहेजें और बाहर निकलें

  3. प्रेस पूंजी ZQ ( shift zq) - बचत के बिना बाहर निकलें।


3
जिसे आप "पूर्व मोड" कह रहे हैं, उसे वास्तव में कमांड-लाइन मोड कहा जाता है । यह आपको पूर्व कमांड दर्ज करने की अनुमति देता है, लेकिन कुछ महत्वपूर्ण अंतरों के साथ
jpaugh

1
हम्म नं। आप दृश्य विधा को भूल रहे हैं।
प्रिएफ्तान

26

मारने के बाद ESC(या cmd+ Cअपने कंप्यूटर पर) आप हिट करना होगा :आदेश प्रकट करने के लिए शीघ्र के लिए। फिर, आप प्रवेश कर सकते हैं quit

आपको लग सकता है कि मशीन आपको छोड़ने की अनुमति नहीं देगी क्योंकि आपकी जानकारी को सहेजा नहीं गया है। यदि आप किसी भी तरह से छोड़ना चाहते हैं, तो !सीधे छोड़ें (यानी :quit!) के बाद दर्ज करें ।


19

मैंने विंडोज पर एक Git क्लाइंट स्थापित करके विम प्राप्त किया। :qमेरे लिए विम से बाहर नहीं निकलेगा। :exitहालांकि किया ...


1
इसी तरह एक लबादा पर परिहास करने के लिए यह काम किया।
जोएल

1
@Joel ने सिर्फ मेरे मैक पर यह जाँच की, दोनों कमांड वैध हैं ( vim -version7.3)।
निक वोल्किन

2
के लिए Git Bashखिड़कियों पर, में Vimकभी कभी ESCकाम नहीं कर रहा। इसके बजाय CTRL+ का उपयोग करें [
वैल

@Val अजीब तरह से परिचित लग रहा है। Iirc इसलिए कि दोनों एक ही काम करते हैं। जैसा ^[है, वैसा ही है ESC। यह दिलचस्प है कि विंडोज इसे और अधिक जटिल बनाता है। और मनोरंजक।
प्रिएत्तन

10

सवाल पूछा गया है है

qएक संख्या के साथ आदेश उस स्थिति में दिए गए विभाजन बंद कर देता है।

:q<split position> या :<split position>q उस स्थिति में विभाजन को बंद देगा।

मान लीजिए कि आपका विम विंडो लेआउट निम्नानुसार है:

-------------------------------------------------
|               |               |               |
-------------------------------------------------
|               |               |               |
|               |               |               |
|    Split 1    |    Split 2    |     Split 3   |
|               |               |               |
-------------------------------------------------

अगर तुम दौड़ो q1 कमांड , तो यह पहले विभाजन को बंद कर देगा। q2दूसरे विभाजन को बंद कर देंगे और इसके विपरीत।

पद छोड़ने की स्थिति में विभाजन की स्थिति कोई मायने नहीं रखती। :2qया:q2 दूसरा विभाजन बंद देगा।

यदि आप जिस स्प्लिट पोजीशन को कमांड को पास करते हैं, वह करंट स्प्लिट्स की संख्या से अधिक है, तो यह अंतिम स्प्लिट को बंद कर देगा।

उदाहरण के लिए, यदि आप q100उपरोक्त विंडो सेटअप पर चलते हैं जहां केवल तीन विभाजन हैं, तो यह अंतिम विभाजन (स्प्लिट 3) को बंद कर देगा।

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