सामान्य मोड को छोड़े बिना एक नई लाइन कैसे डालें


24

मुझे आश्चर्य है कि अगर मैं सामान्य मोड को छोड़कर एक नई लाइन सम्मिलित कर सकता हूं। उदाहरण के लिए, मेरी दो लाइनें हैं:

this is line one
this is line two

और कर्सर लाइन एक पर है। अब मुझे लाइन एक और लाइन दो के बीच एक नई लाइन चाहिए, जैसे:

this is line one

this is line two

मुझे पता है कि जब मैं सामान्य मोड में होता हूं, तो मैं बस प्रेस कर सकता हूं o। लेकिन यह इन्सर्ट मोड में प्रवेश करेगा।

मैं एक नई लाइन कैसे सम्मिलित कर सकता / सकती हूं और सामान्य मोड में रह सकती हूं?


1
: पर एक नजर डालें vim.wikia.com/wiki/Insert_newline_without_entering_insert_mode
cuonglm

जवाबों:


10

मैं उसके लिए एक मैपिंग का उपयोग करता हूं:

" Quickly insert an empty new line without entering insert mode
    nnoremap <Leader>o o<Esc>
    nnoremap <Leader>O O<Esc>

इस तरह आप अपने कर्सर के नीचे एक लाइन डाल सकते हैं <Leader>oऔर पिछली लाइन पर एक के साथ <Leader>O

नोट: कोई यह तर्क दे सकता है कि उसे उतने ही कीस्ट्रोक्स की आवश्यकता है, o<Esc>लेकिन उम्मीद है कि आपने इस तरह के मानचित्रण को आसान बनाने के लिए अपने नेता का चयन किया। इसके अलावा, मुझे यकीन नहीं है कि ऐसा करने का एक अंतर्निहित तरीका है।


8

एक समाधान जो इन्सर्ट मोड से नहीं जाता है, कर्सर को स्थानांतरित नहीं करता है, और आपको एक बार में कई लाइनों को जोड़ने के लिए एक काउंटर का उपयोग करने की अनुमति देता है ( 3\oआदि):

nnoremap <silent> <leader>o :<C-u>call append(line("."),   repeat([""], v:count1))<CR>
nnoremap <silent> <leader>O :<C-u>call append(line(".")-1, repeat([""], v:count1))<CR>

5

मैं व्यक्तिगत रूप से टिम पोप के Unimpaired प्लगइन का उपयोग करने की सलाह देता हूं । यह कई मैपिंग प्रदान करता है, लेकिन जिन्हें आप देख रहे हैं वे हैं [<space>और ]<space>जो क्रमशः वर्तमान लाइन के ऊपर और नीचे रिक्त लाइनें बनाते हैं। त्वरित सूची, बफ़र सूची, विकल्प टॉगलिंग, और कई अन्य लोगों के माध्यम से जाने के लिए अप्रभावित अच्छा मैपिंग भी प्रदान करता है। :h unimpairedअधिक के लिए देखें ।

अगर आप अनइम्पेयर्ड प्लगइन का उपयोग नहीं करना चाहते हैं लेकिन नीचे दिए गए मैपिंग की तरह आपकी ~/.vimrcफाइल में डालने के लिए कुछ त्वरित मैपिंग हैं :

nnoremap <silent> [<space>  :<c-u>put!=repeat([''],v:count)<bar>']+1<cr>
nnoremap <silent> ]<space>  :<c-u>put =repeat([''],v:count)<bar>'[-1<cr>

5

यदि आप मैपिंग नहीं जोड़ना चाहते हैं, तो आप yyएक खाली लाइन पर जा सकते हैं और फिर pनीचे कर्सर के लिए और कर्सर Pके ऊपर चिपकाया जा सकता है।


बिना मैपिंग के शायद यह सबसे अच्छा जवाब है।
विलेम वैन केटविच

या इसे oरजिस्टर में सेव करें "oyyऔर जब भी जरूरत हो, वहां से पेस्ट करें "op
माइक

4

मेरी मैपिंग का उपयोग करता है Shift-Enter। यह दूसरों से अलग है कि कर्सर को उसी लाइन पर वापस लौटा दिया गया है और मार्क ओ का उपयोग करके कॉलम

" Insert new line above without going into insert mode
" (uses mark o to return to the previous cursor column)
nnoremap <S-Enter> moO<Esc>`o

5
ध्यान दें कि मैपिंग <S-Enter>टर्मिनल एमुलेटर में काम नहीं करता है (यह केवल जीवीएम में काम करता है)। तो आपको इसे मैप करने के लिए एक अलग कुंजी संयोजन का चयन करने की आवश्यकता होगी
;;

2

मैक्सिम किम का यह जवाब जीवन बदलने वाला था:

noremap <silent> <space> :exe "normal i".nr2char(getchar())<CR>

और उस पर मेरी दरार:

noremap <silent> <s-space> :exe "normal a".nr2char(getchar())<CR>

उन पंक्तियों को अपने में रखें vimrc। तब आपकी फ़ाइल और हिट की दूसरी पंक्ति की शुरुआत करने के लिए जाना Space, Enter, या प्रथम पंक्ति और हिट के अंत में जाना Shift+Space, Enter। या तो पहली और दूसरी लाइनों के बीच खाली लाइन जोड़ देगा, और आपको सामान्य मोड में छोड़ देगा।

आप किसी अन्य एकल कुंजी के लिए भी इनका उपयोग कर सकते हैं - हिट Spaceया Shift+Spaceउसके बाद जो कुंजी आप चाहते हैं और वह क्रमशः इसे सम्मिलित या जोड़ देगा।


2

ये मैपिंग वही करेगी जो आप ढूंढ रहे हैं।

nnoremap <c-n> @="m`o\eg``"<cr>
nnoremap <c-p> @="m`O\eg``"<cr>   

ये कर्सर के पहले या बाद में नई संख्याओं की संख्या सम्मिलित करते हैं; कर्सर को ठीक उसी स्थान पर रखना जहाँ वह है, बिना जम्प सूची को बदले।

एक अन्य समाधान सिर्फ एक शॉर्टकट बनाना है जो एक नए नाम के साथ अनाम रजिस्टर को भरता है। तब आप नई कमांड डालने के लिए बस पुट कमांड, पी या पी का उपयोग कर सकते हैं। उदाहरण के लिए:

nnoremap "<cr> :let @@="\n"<cr>

1

इसके लिए मेरी मैपिंग है

 " Create Blank Newlines and stay in Normal mode
nnoremap <silent> zj o<Esc>k
nnoremap <silent> zk O<Esc>j

स्टैडोक्स से भिन्न यह कर्सर को उसी स्थान पर रखता है।


क्या <silent>मतलब है?
एलेक्स

यह स्टेटस लाइन को कुछ भी इको करने से रोकता है। मुझे पूरा यकीन है कि यह इस विशिष्ट मामले में कुछ भी नहीं करता है, यह सिर्फ वहां था जहां मैंने मूल रूप से इसे कॉपी किया था, बहुत पहले। देख लो :h map-silent
केविन

-1

मेरा व्यक्तिगत समाधान अभिव्यक्ति रजिस्टर में एक नई लाइन वर्ण चिपका देता है और इसे वर्तमान पंक्ति के बाद चिपका देता है, फिर मूल स्थिति में वापस आ जाता है:

nnoremap K m`"="\n"<CR>p``
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.