कमांड-लाइन मोड टाइप करें <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.