विम के साथ एक नई लाइन में कैसे पेस्ट करें?


144

मुझे अक्सर नई लाइन में कुछ सामान को विम पर चिपकाना पड़ता है। मैं आमतौर पर क्या करता हूं:

o<Esc>p

जो एक नई लाइन सम्मिलित करता है और मुझे प्रविष्टि मोड में डालता है, जैसे कि प्रविष्टि मोड और अंत में चिपकाता है।

तीन कीस्ट्रोक्स। बहुत कुशल नहीं है। कोई बेहतर विचार?


8
3 कीस्ट्रोक्स कुशल नहीं है?
gtd

60
1 या 2 बेहतर होगा :) यदि अधिकतम दक्षता के लिए नहीं तो विम का उपयोग क्यों करें?
स्थिर_परिष्ठ

2
यह भी एक अतिरिक्त newline परिणाम अगर नकल सामग्री एक newline में समाप्त होता है।
जोनाथन डब्ल्यू।

1
@gtd एक सामान्य संपादक <Enter> <CV> के साथ काम करता है। दो कीस्ट्रोक्स।
14:40 पर user4052054

1
@ user4052054 नहीं, यह वही काम नहीं करता है, ओ / ओ जहां भी आप लाइन में हैं, एक सामान्य संपादक में आपको पहले लाइन की शुरुआत या अंत में जाना होगा। इसके अलावा, यदि आप एक पूरी लाइन की नकल कर रहे हैं, तो पूरी बात बस एक लाइन डालने के लिए एक कीस्ट्रोकेक बन जाती है, जो कोडिंग में बहुत अधिक सामान्य प्रस्ताव है।
GTD

जवाबों:


71

इसके :help pकहने के कुछ समय बाद :

:[line]pu[t] [x]    Put the text [from register x] after [line] (default
                    current line).  This always works |linewise|, thus
                    this command can be used to put a yanked block as
                    new lines.

:[line]pu[t]! [x]   Put the text [from register x] before [line]
                    (default current line).

दुर्भाग्य से यह आपके वर्तमान समाधान से कम नहीं है जब तक कि आपने इसे किसी अलग उत्तर में सुझाए गए कीबोर्ड के साथ जोड़ नहीं दिया। उदाहरण के लिए, आप इसे किसी भी कुंजी के लिए मैप कर सकते हैं (यहां तक ​​कि p):

:nmap p :pu<CR>

2
मुझे पता है कि, और मैं इसका उपयोग करता हूं, लेकिन यह वह नहीं है जो मैं पूछ रहा हूं, क्योंकि कभी-कभी जो आप कॉपी कर रहे हैं, उसमें कोई एलएफ नहीं है। यदि "एक नई पंक्ति में पेस्ट" कमांड था, तो यह उस सामग्री की परवाह किए बिना काम करेगा जो आप पेस्ट करने वाले हैं, इसलिए आपको इसके बारे में सोचने की ज़रूरत नहीं होगी।
static_rtti

5
ठीक है, :pu[t]वर्तमान लाइन के बाद :pu[t]!टेक्स्ट को एक नई लाइन में डाल देगा, टेक्स्ट को मौजूदा लाइन से पहले एक नई लाइन में डाल देगा। मैं उसी के अनुसार अपना उत्तर संपादित करूंगा। (हुर्रे के लिए :help p।)
बॉम्बे

2
वास्तव में मेरे वर्तमान समाधान से बेहतर नहीं है, लेकिन मुझे लगता है कि यह मेरे सवाल का सबसे अच्छा जवाब है।
static_rtti 13

4
जबकि कीस्ट्रोक्स की समान संख्या, मुझे लगता है कि यह अधिक कुशल लगता है। o <Esc> p क्लंकी लगता है, जबकि ऐसा नहीं है।
मार्क स्टोरी

2
आप p सहित स्वयं किसी भी कुंजी पर कमांड को मैप कर सकते हैं: :nmap p :pu<CR>इसे अपने .vimrc फ़ाइल में डालें और बंद करें :)
Capi Etheriel

55

विकल्प:

1) yyपूरे लाइन (लाइन वर्ण के अंत सहित ) का उपयोग करने के लिए। pवर्तमान के बाद एक नई लाइन पर लाइन पेस्ट करेगा और P( Shift-P ) करंट लाइन के ऊपर पेस्ट करेगा।

2) एक मैपिंग करें: तो यह केवल एक या दो कुंजी है:

:nmap ,p o<ESC>p
:nmap <F4> o<ESC>p

3) मानचित्रण का कार्य संस्करण (अनावश्यक रूप से, लेकिन सिर्फ पूर्णता के लिए):

:nmap <F4> :call append(line('.'), @")<CR>

" This one may be a little better (strip the ending new-line before pasting)
:nmap <F4> :call append(line('.'), substitute(@", '\n$', '', ''))<CR>

:help let-register
:help :call
:help append()
:help line()
:help nmap

2
खैर, मुझे लगता है कि मैं एक मानचित्रण करूँगा। मैं बस एक मानक समाधान हो सकता है उम्मीद कर रहा था: - / आपके उत्तर के लिए धन्यवाद!
static_rtti

2
@ एएआई: ', पी' (',' का उपयोग मेरे मैप के रूप में किया जाता है) मेरे विचार में सबसे अच्छा समाधान है। YOu ने भी फ़ंक्शन का उपयोग करने के लिए एक आसान प्रदान किया। :) महान!
कोई अभी भी आपको

30

आप बफर मोड में पेस्ट करने <C-R>के लिए बफर के नाम का उपयोग करके एक बफर पेस्ट कर सकते हैं । डिफ़ॉल्ट बफर है ", इसलिए आप ऐसा करेंगे

o<C-R>"

मैंने पाया कि मैं <C-R>"बहुत बार उपयोग करता हूं और <C-F>अपने vimrc में इसे बाध्य करता हूं:

inoremap <C-F> <C-R>"

2
यह बहुत अच्छा है क्योंकि यह इंडेंटेशन को सही रखता है यदि कॉपी की गई लाइन इंडेंट नहीं की गई थी।
कॉर्नस्मिथ

24

यह अभी भी तीन कीस्ट्रोक्स का उपयोग करता है, लेकिन मुझे यह Esc की तुलना में आसान लगता है:

o<Alt-p>

चूँकि आप ओ मारने के बाद इन्सर्ट मोड में हैं, तो Alt modifier आपको कमांड का उपयोग करने की अनुमति देगा जैसे कि आप नहीं थे।


2
काफी आसान तरीका है जब आप एक नई लाइन में "d $" के साथ लाइन के अंदर कटे हुए yank sth की कोशिश करते हैं
Serhat Cevikel

क्षमा करें, लेकिन यह इंडेंट नहीं रखता है, यह इसके बजाय लाइन की शुरुआत में चिपकाता है।
माइकल गोल्डस्मिन

किसी को भी मैक के लिए इस विधि का विस्तार कर सकते हैं (कोई Alt)?
ली हैनान

@Lihaonan आपका प्रश्न 8 महीने पहले से है, उम्मीद है कि आपने पहले ही stackoverflow.com/q/7501092/5407634
m_mlvx

12

इस प्लगइन का उपयोग करना: https://github.com/tpope/vim-unimpaired

]pनीचे लाइन पर चिपकाया जाता है

[pऊपर लाइन पर चिपकाता है

फायदे:

  • सभी yanked पाठ पर काम करता है (शब्द, लाइन, चरित्र, आदि)
  • चिपकाए गए पाठ को इसके चारों ओर के पाठ के इंडेंटेशन से मेल खाने के लिए प्रेरित करता है
  • 3 के बजाय 2 कीस्ट्रोक्स और बहुत "आसान" स्ट्रोक
  • तेज

1
मेरा पसंदीदा भी। ध्यान देने योग्य हो सकता है कि आपको tpope/vim-unimpaired😉 काम करने के लिए इसकी आवश्यकता हो ।
अलेक्ट्स

1
आह मैं स्थापित किया है कि बहुत पहले मैं इसके बारे में भूल गया था। याद दिलाने के लिए शुक्रिया!
क्रॉपर्स

9

व्यक्तिगत रूप से मैंने इस तरह एंटर (CR) को नामांकित किया है :

nmap <CR> o<Esc>k

... इसी पर आधारित है विम विकिया लेख ।

इस तरह से मैं सामान्य मोड से सीधे नई लिंक बना सकता हूं, और इसे एक नई पंक्ति में पेस्ट करने की इच्छा के साथ जोड़कर नीचे मैं करूँगा:

<CR>jp

तुम भी छोड़ सकता है कश्मीर से ऊपर nmap में क्या कार्यक्षमता आप से पसंद करते हैं पर निर्भर करता है, दर्ज करें , तो यह सिर्फ होगा<CR>p

मैंने Esc से jj को भी मैप किया है , जो इस मामले में भी सहायता करेगा। Esc घरेलू पंक्ति से बहुत दूर है, क्योंकि यह कितना महत्वपूर्ण है।

अन्य समाधानों की तुलना में कम नहीं है, लेकिन मुझे लगता है कि यह उनमें से कुछ की तुलना में कम भद्दा लगता है, और इसके अन्य उपयोग भी हैं।


5

यदि आप एक पूरी लाइन की नकल कर रहे हैं, तो एक पूरी लाइन को चिपकाते हुए, Yलाइन या लाइनों को लाइन ब्रेक सहित, पहली जगह में, और pचिपकाने के लिए उपयोग करें। आप विज़ुअल मोड के लिए सादे के विपरीत, Vविज़ुअल लाइन मोड का उपयोग भी कर सकते हैं v


3
समस्या यह है, कभी-कभी आप बस एक पूरी लाइन की नकल नहीं करना चाहते हैं ... मैं एक समाधान चाहता हूं जो काम करता है कि क्या मैंने दस लाइनों या दो शब्दों की नकल की है।
static_rtti

3

मेरी मैपिंग है inoremap jj <ESC>। तो इसके साथ नई लाइन डालने के लिए आसान है ojjऔर Ojjऔर उसके बाद p

इसलिए ojjpएक नई लाइन पेस्ट करें। यह एक और स्ट्रोक है, o<esc>pलेकिन ojjpमेरे लिए आसान है।


2

मुझे इसका एक सुंदर समाधान मिला। यदि आप अपने ओएस के क्लिपबोर्ड में यैंक रजिस्टर डाल रहे हैं (जो वैसे भी बहुत अच्छा है), के साथ

set clipboard+=unnamed

जितना आप कर सकते हैं o<Ctl-v>

कम स्ट्रोक होने के अलावा, यह दोनों पर सुधार करता है o<Esc>pऔर :puक्योंकि यह इंडेंटिंग को संरक्षित करता है: दोनों अन्य विकल्प आपको नई लाइन पर चरित्र शून्य पर शुरू करते हैं।

कैविएट यह है कि यह ओएस पर निर्भर हो सकता है या नहीं भी हो सकता है। मुझे पता है कि यह ओएस एक्स के हाल के संस्करण पर काम करता है, लेकिन क्लिपबोर्ड ओएस क्लिपबोर्ड में यैंक प्राप्त करने के कई तरीकों में से एक है।


1

यदि आप इन्सर्ट मोड में भी समाप्त करना चाहते हैं, तो इंसर्ट मोड का उपयोग करते हुए पेस्ट करना संभव है CTRL-R "https://stackoverflow.com/a/2861909/461834

फिर भी तीन कीस्ट्रोक्स, लेकिन कोई बच नहीं, और आप वैसे भी सम्मिलित रूप से समाप्त करना चाहते हैं, तो आप एक कीस्ट्रोक को बचाते हैं।


1

मैं अपने नव-विन्यास में निम्नलिखित मानचित्रण का उपयोग करता हूं:

nnoremap <leader>p m`o<ESC>p``
nnoremap <leader>P m`O<ESC>p``

थोड़ा स्पष्टीकरण:

  • m`: वर्तमान कर्सर स्थिति में एक चिह्न सेट करें।
  • o<Esc>p: नीचे एक नई लाइन बनाएं और इस लाइन में टेक्स्ट पेस्ट करें
  • O<Esc>P: ऊपर एक नई लाइन बनाएं और इस लाइन में टेक्स्ट पेस्ट करें
  • ``: कर्सर को मूल स्थिति में रखें

:h markविम के निशान के बारे में अधिक जानकारी के लिए देखें ।


1

यदि आप इन्सर्ट मोड में रहना चाहते हैं, तो आप कर सकते हैं o ctrl+o p

  • o - मोड डालें और नई लाइन पर जाएं
  • ctrl+o - सामान्य मोड की तरह एकल कमांड चलाएं
  • p - पेस्ट

यह तीन कीस्ट्रोक्स है लेकिन आप इन्सर्ट मोड में रहते हैं और यह o ctrl+oकाफी तेज़ है इसलिए मैं व्यक्तिगत रूप से इसे 2.5 कीस्ट्रोक्स मानता हूँ।


0

यह समाधान केवल तब लागू होता है जब कॉपी किए गए टेक्स्ट का ब्लॉक एक नई लाइन पर शुरू होता है (जैसा कि लाइन के भीतर कहीं टेक्स्ट के स्निपेट को हथियाने का विरोध किया जाता है), लेकिन आप हमेशा उस आखिरी चरित्र पर अपनी कॉपी शुरू कर सकते हैं जिसे आप हथियाना चाहते हैं, फिर नेविगेट करें अपने वांछित प्रतिलिपि ब्लॉक की शुरुआत से पहले लाइन के अंत में अंतिम चरित्र। फिर जब आप इसे पेस्ट करना चाहते हैं, तो कर्सर को उस पंक्ति के अंत में रखें, जिसके तहत आप चाहते हैं कि आपका पाठ चिपकाया जाए और पी को हिट किया जाए। यदि मैंने स्पष्टीकरण नहीं दिया है, तो आपको वह प्रभाव प्रदान करना चाहिए जिसकी आप तलाश कर रहे हैं।

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