क्या उपनाम बनाने का कोई तरीका है: w 'को `:`: w`, नाम की फाइलें बनाने से बचने के लिए?


9

कभी-कभी, मेरी पिंकी 'प्रवेश के लिए पहुंचते समय कुंजी को पकड़ लेगी , जिसके परिणामस्वरूप :w'<Enter>

मैंने कोशिश की:

cabbrev w' :w
cabbrev w\' :w
cabbrev "w'" :w

उनमें से कोई भी काम नहीं करता है। क्या उर्फ ​​के :w'लिए एक रास्ता है :w?

मैं सामान्य कमांड-लाइन के बजाय cmdwin ( :help cmdwin+ nnoremap : :<C-F>) का भी उपयोग करता हूं , इसलिए यदि यह वहां भी काम करता है तो बोनस अंक।


3
हां; मैं एक ही समस्या के साथ \
मार्टिन Tournoij

जवाबों:


8

जैसा कि पीटर रिनकर बताते हैं, cmapअन्य स्थानों में भी विस्तार cnoreabbrevहो सकता है , इसलिए बेहतर होगा :

cnoreabbrev w' w

या, सबसे सुरक्षित, फिर से पीटर के लिए धन्यवाद:

cnoreabbrev <expr> w' getcmdtype() == ":" && getcmdline() == "w'" ? "w" : "w'"

यदि कमांड लाइन में केवल स्पष्ट रूप से जाँच करके w', स्थितियों में अवांछित विस्तार से बचा जा सकता है।

आप एक का उपयोग कर सकते हैं cmap:

cmap w' w

आपको अभी भी प्रेस करना होगा Enter, लेकिन एक आकस्मिक 'अब नजरअंदाज किया जाना चाहिए।

यदि आप उपयोग कर रहे हैं cmdwin, तो एक inoremapसेट autocmdउपयोगी हो सकता है:

autocmd CmdwinEnter * inoremap w' w
autocmd CmdwinLeave * iunmap w'

मैं भागा :cmap w' w, लेकिन व्यवहार में कोई बदलाव नहीं आया। :w'अभी भी एक फ़ाइल के नाम पर लिखने का परिणाम है '"'" [New] 0L, 0C written
mwcz

@mwcz क्या 'वास्तव में दिखाई देता है जब आप इसे दबाते हैं w? इसे cmapसफलतापूर्वक नहीं बनाया जाना चाहिए - एक cmap LHS RHS के साथ स्वचालित रूप से भर जाता है, इसलिए यदि आप a दबाते हैं, तो 'इसे केवल दिखाना चाहिए w
मुरु

1
नंगे cmapऔर के साथ सावधान रहो cabbrev। वे अन्य मोड और अन्य स्थानों पर निष्पादित / विस्तार करेंगे। जैसे :s/'follow'/fooऔर /'follow'। कृपया निम्नलिखित विम परिवर्तन देखें: x फ़ंक्शन को सहेजने और छोड़ने या cmdalias.vim के
पीटर रिंचर

1
क्षमा से बेहतर सुरक्षित:cnoreabbrev <expr> w' getcmdtype() == ":" && getcmdline() == "w'" ? "w" : "w'"
पीटर रिनकर

हां, 'अभी भी पता चलता है, लेकिन मुझे अभी पता चला है क्योंकि मैं कमांड दर्ज करने के लिए cmdwin का उपयोग कर रहा हूं, और cmdwin सिर्फ एक नियमित बफर है, इसलिए cmap/cnoreabbrevवहां काम न करें। noreabbrevCmdwin उपयोगकर्ताओं के लिए विकल्प के साथ उत्तर को अद्यतन करना । :) धन्यवाद!!!
mwcz

0

यह विधि मेरे लिए काम करती है:

:ca w' w

वैकल्पिक रूप से आप अपने बफर को सेट कर सकते हैं जब आप वर्तमान बफर को बचाने के लिए Esc को दो बार मारते हैं, जैसे

:map <Esc><Esc> :w<CR>

या फ़ाइल को Ctrl+ sया F2: से बचाने के लिए निम्न मानचित्रण का उपयोग करें

nmap <c-s> :w<CR>
vmap <c-s> <Esc><c-s>gv
imap <c-s> <Esc><c-s>

nmap <F2> :update<CR>
vmap <F2> <Esc><F2>gv
imap <F2> <c-o><F2>

नोट: F2 केवल यदि आवश्यक हो तो बचाता है, और उपयोगकर्ता को मोड में डालने के लिए (या उनके दृश्य चयन को पुनर्स्थापित करता है), आवश्यकतानुसार।

स्रोत: विम विकिया में किसी फ़ाइल को सहेजना

या निम्नलिखित विकल्पों का उपयोग करें:

  • :up( :update) के लिए:w
  • ZQ के लिये :q
  • ZZके लिए :wqया:x

प्रश्न में उद्धरण चिह्न पर ध्यान दें। :w', नहीं :w। मैं :wगलती से मारने के बिना उपयोग करना चाहता हूं ', जो एक फ़ाइल लिखता है जो मुझे तब चाहिए rm \'। अच्छी युक्तियां, हालांकि।
mwcz

1
Ctrl-S एक सिगस्टॉप नहीं भेजता है - यदि प्रोग्राम बंद हो जाता है, तो यह संभवतः है क्योंकि एक बफर भरा हुआ था। Unix.stackexchange.com/questions/13629/… ' देखें
muru
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.