कमांड-लाइन मोड टाइप करें <Esc> और Ctrl कमांड


11

कल्पना कीजिए कि आप नीचे दिए गए शब्द को उद्धृत करना चाहते हैं। यदि |कर्सर स्थिति है तो आप cw""<Esc>Pसामान्य मोड से आसानी से शब्द को उद्धृत कर सकते हैं ।

|below

मैं कमांड-लाइन मोड में समान व्यवहार हासिल करना चाहता हूं। मेरा सवाल यह है कि मैं कमांड-लाइन मोड से कैसे कह सकता हूं कि मैं एक टाइप करना चाहता हूं <Esc>। मैंने कोशिश की :norm cw""<Esc>Pऔर कुछ अन्य बदलाव किए लेकिन मैं सिर्फ ""<Esc>Pइसके बजाय मिलता हूं "below"।

फिर भी इससे संबंधित मैं जानना चाहूंगा कि मैं कैसे कमांड-लाइन मोड टाइप कर सकता हूं Ctrl कमांड। उदाहरण के लिए, मैं cw"<C-r>""<Esc>इसके बजाय उपरोक्त शब्द को उद्धृत कर सकता हूं । लेकिन तब मुझे <C-r>मेरे लिए टाइप करने के लिए कमांड-लाइन की आवश्यकता होगी । मैं यह कैसे कर सकता हूँ?


1
जैसे <C-x><C-e>कमांड-लाइन को संपादित करने के लिए रीडलाइन में है $EDITOR, <C-f>कमांड लाइन विंडो खोलने के लिए आपके पास विम है। देखते हैं :help cmdline-window।
— रोमेनिल

जवाबों:


11

<C-v>वह है जो आप ढूंढ रहे हैं। यह आपको Escकुछ भी भागने की आवश्यकता के बिना शाब्दिक वर्ण (जैसे, स्ट्रिंग "Esc" के बजाय शाब्दिक) दर्ज करने की अनुमति देता है ।

:norm cw""<C-v><Esc>P

के रूप में प्रदर्शित करता है:

:norm cw""^[P

और आप क्या चाहते हैं (यानी, शब्द का उद्धरण)। आप इसे अन्य <C-?>मैपिंग के साथ भी उपयोग कर सकते हैं । उदाहरण के लिए, आपका दूसरा अनुरोध:

:norm cw"<C-v><C-r>""

के रूप में प्रदर्शित करता है:

:norm cw"^R""

और उपरोक्त के समान परिणाम देगा। Escअंत में अतिरिक्त को शामिल करने की कोई आवश्यकता नहीं है ।


10

ऐसा इसलिए है क्योंकि विशेष कुंजी जैसे आदेशों <Esc>में अनुवादित नहीं हैं normal, और आपके द्वारा दबाए गए की तरह व्यवहार किया जाता है <Esc>। इसे मापने के लिए, आप एक execकमांड का उपयोग कर सकते हैं । इस तरह:

:exec "norm cw\"\"\<Esc>P"

ध्यान दें कि आपको उद्धरण और से पहले एक बैकस्लैश डालना होगा <Esc>, और दोहरे उद्धरण के बजाय एकल उद्धरण का उपयोग करने से काम नहीं चलेगा।


क्या यह Ctrl कमांड के लिए भी काम करता है? मुझे उन्हें कमांड में कैसे लिखना चाहिए?
— गोंकोलो रिबेरो

हाँ, यह काम करना चाहिए। आप उन्हें इस तरह लिख सकते हैं:"\<C-{insert key}>"
— एवरग्रीनट्री

2

कमांड-लाइन मोड अलग है; आप वहीं (सामान्य मोड) संपादन कमांड का उपयोग नहीं कर सकते। आप पर आदेशों की एक सूची पा सकते हैं :help c_CTRL-V।

अब, कमांड-लाइन विंडो ( :help command-line-window) है, जिसे q:सामान्य-और <C-F>कमांड-लाइन मोड से दर्ज किया जा सकता है। में है कि खिड़की, आप सभी सामान्य आदेश और मैपिंग का उपयोग कर सकते हैं, ताकि विकल्प 1 होगा।

विकल्प 2 कमांड-लाइन मोड के लिए विशेष मैपिंग है। जैसा कि मैंने कहा, आप :normalएट अल के माध्यम से दृष्टिकोण का उपयोग नहीं कर सकते । उन्हें परिभाषित करने की कुंजी है :help c_CTRL-\_eमैपिंग, जो "मूल्यांकन [s] {expr} और परिणाम के साथ पूरे कमांड लाइन को प्रतिस्थापित करता है।" यहाँ एक सरल उदाहरण है जो केवल कमांड-लाइन के अंत में सही ढंग से काम करता है:

:cnoremap <F1> <C-\>esubstitute(getcmdline(), '\w\+$', '"&"', '')<CR>

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