टेक्स्ट को विम में पेस्ट करने पर ऑटो इंडेंट को बंद करना


1186

मैं विम सीखने का प्रयास कर रहा हूं।

जब मैं क्लिपबोर्ड से अपने दस्तावेज़ में कोड पेस्ट करता हूं, तो मुझे प्रत्येक नई पंक्ति की शुरुआत में अतिरिक्त स्थान मिलते हैं:

line
  line
    line

मुझे पता है कि आप ऑटो इंडेंट को बंद कर सकते हैं, लेकिन मैं इसे काम नहीं कर सकता क्योंकि मेरे पास कुछ अन्य सेटिंग्स हैं जो विवादित हैं या कुछ और (जो मेरे .vimrc में बहुत स्पष्ट दिखते हैं लेकिन जब मैं उन्हें बाहर निकालता हूं तो कोई बात नहीं लगती है)।

जब मैं कोड पेस्ट करता हूं तो मैं ऑटो इंडेंटिंग को कैसे बंद कर सकता हूं, लेकिन फिर भी जब मैं कोड लिख रहा हूं तो ऑटो इंडेंट क्या है? यहाँ मेरी .vimrcफ़ाइल है:

set expandtab  
set tabstop=2  
set shiftwidth=2  
set autoindent  
set smartindent  
set bg=dark  
set nowrap  

4
FWIW, vim 8.0.210 ब्रैकेटेड पेस्ट के लिए मूल समर्थन जोड़ता है, इसलिए यह पेस्ट किए गए पाठ को इंडेंट करने से बचाएगा
sh1

आदेश vim के पेस्ट के साथ नगण्य से बचने के लिए नई फ़ाइलों के लिए / nopaste आप कर सकते हैं cat > mynewfile.txtप्रेस दर्ज करें , अपने पाठ पेस्ट, प्रेस दर्ज करें फिर से, और फिर सीटीआर + डी को बचाने के लिए। फ़ाइल अब बनाई गई है और आप इसे संपादित कर सकते हैं vim mynewfile.txt
ccpizza

जवाबों:


2065

अपडेट: यहां बेहतर उत्तर दें: https://stackoverflow.com/a/38258720/62202

जब आप कोड पेस्ट करते हैं तो ऑटोइंडेंट को बंद करने के लिए, एक विशेष "पेस्ट" मोड होता है।

प्रकार

:set paste

फिर अपना कोड पेस्ट करें। ध्यान दें कि टूलटिप में पाठ अब कहता है -- INSERT (paste) --

जब आप अपना कोड पेस्ट कर लेते हैं, तो पेस्ट-मोड बंद कर देते हैं, ताकि जब आप फिर से सही तरीके से काम करें तो ऑटो-इंडेंटिंग।

:set nopaste

हालांकि, मैंने हमेशा उस बोझिल को पाया। इसलिए मैं ऐसा नक्शा <F3>करता हूं कि यह पाठ को संपादित करते समय पेस्ट और नोस्टैस्ट मोड के बीच बदल सकता है ! मैं इसे जोड़ता हूं.vimrc

set pastetoggle=<F3>

38
इसके :set noaiबाद की तुलना में यह कोई आसान नहीं है :set ai। सुझाव :r! catछोटा है।
'21:34

68
मुझे लगता set pasteहै कि आसान है, निश्चित रूप से। यह noaiया उससे भी अधिक अर्थपूर्ण है noautoindent, जो कि "नोई" और "पेस्ट" टाइप करते समय अधिक महत्वपूर्ण है, एक समान महत्वहीन राशि के बारे में समय लेते हैं जब आप एक स्पर्श टाइपिस्ट के रूप में पर्याप्त कुशल होते हैं।
विक्टर ज़मानियन

52
:set noaiहमेशा यह काम नहीं करता है, यह इस बात पर निर्भर करता है कि ओपी के अनुसार अन्य इंडेंट-संबंधित सेटिंग्स कैसे कॉन्फ़िगर की जाती हैं। :set pasteएक साथ कई सेटिंग्स के लिए एक आशुलिपि प्रतीत होता है।
MarkHu

13
पार्टी के लिए देर हो चुकी है, लेकिन set copyindentआप के लिए निर्बाध रूप से इसका ख्याल रखेंगे।
मैट रयान

33
:set pasteअन्य विशेषताओं जैसे ब्रेसिंग को पूरा करने में भी अक्षम करता है, जो कोड चिपकाने के दौरान भी नहीं चाहता है।
मैनुअल फॉक्स

263

पेस्ट करते समय अवांछित प्रभावों से बचने के लिए, एक विकल्प है जिसे सेट करने की आवश्यकता है:

set paste

आपके .vimrc में एक उपयोगी कमांड है set pastetoggle=<F10>या कोई और बटन, आसानी से पेस्ट और नोस्टैस्ट के बीच टॉगल करने के लिए।


13
आखिरकार! मैं टाइप करता रहा: सेट पेस्ट /: सेट नोपेस्ट, कितना बेवकूफ! धन्यवाद।
imwilsonxu

4
व्यावहारिक दृष्टिकोण से, आपका उत्तर स्वीकृत उत्तर की तुलना में अधिक उपयोगी है
लिनोब

8
एक अन्य विकल्प अपने vimrc में एक मैक्रो जोड़ना है:nmap <silent> <leader>p :set paste<CR>"*p:set nopaste<CR>
क्रिस

अच्छा सुझाव @ क्रिस - इंडेंटेशन मुद्दों के बिना पेस्ट करने के लिए एकल कुंजी अनुक्रम!
रिचवेल 13

क्या होगा अगर मैं पेस्ट मोड में कभी नहीं होना चाहता? क्या स्थायी रूप से अक्षम करने का कोई तरीका है?
अधिकतम

132

मैं आमतौर पर सामग्री का उपयोग करता हूं :r! catऔर फिर पेस्ट ( shift + insert )करता हूं , और CTRL+D

प्रत्यक्ष उपयोग को सक्षम और अक्षम करने की आवश्यकता नहीं है।


मुझे यह प्रत्यक्ष उपयोग विकल्प पसंद है। मैं अभी भी सीख रहा हूँ कि वेब पेजों पर विम सिंटैक्स कैसे पढ़ा जाता है। आपके कदमों का क्या मतलब है? विशेष रूप से, मुझे लगता है कि मेरे पास सिस्टम क्लिपबोर्ड पर कुछ है, मैं इसे दस्तावेज़ में पेस्ट करने के लिए क्या दबाऊं?
jvriesem

9
क्यों और कैसे :r! catकाम करता है, इसकी जानकारी के साथ यह उत्तर अधिक सहायक होगा ।
के एरलैंडसन

11
@Krlandsson, :rकिसी फ़ाइल की सामग्री को वर्तमान दस्तावेज़ में सम्मिलित करता है। !catकहते हैं, बिल्ली को चलाने के लिए जो अनिवार्य रूप से स्टड (* निक्स के गोले) खोलती है (shift + insert)या कुछ टर्मिनलों के लिए, राइट माउस क्लिक क्लिपबोर्ड की सामग्री को टर्मिनल CTRL+Dमें पेस्ट कर देगी , यह फ़ाइल का अंत है, इसलिए यह :r !catसत्र को बंद कर देता है ।
डैनियल

क्या यह 'प्रत्यक्ष' है, वास्तव में? pasteइस उद्देश्य के लिए पूरी तरह से बनाया गया एक विकल्प स्थापित करना? @jvriesem यह 'प्रत्यक्ष' विकल्प नहीं है, अगर मैं उस शब्द के बारे में आपकी समझ को सही मानता हूं।
०१ --०। डी ० '३१

आप :r! catतब CTRL+SHIFT+Vटर्मिनल (तब CTRL+D) में पेस्ट करने के लिए भी उपयोग कर सकते हैं ।
पॉल रौजीक्स

86

यदि आप स्थानीय स्तर पर काम कर रहे हैं, तो आप कुंजी क्रम से सिस्टम क्लिपबोर्ड से पेस्ट कर सकते हैं:

"+p

यह एक उचित vim कमांड है, इसलिए पहले सम्मिलित मोड में प्रवेश करने या स्विच ऑफ करने की चिंता करने की कोई आवश्यकता नहीं है।

बेशक अगर आप दूर से काम कर रहे हैं (उदाहरण के लिए SSH पर कंसोल), तो यह काम नहीं करेगा और आपको कहीं और जाना चाहिए :set noai, मोड डालें, कंसोल में पेस्ट करें , सम्मिलित करें, :set aiमार्ग को छोड़ दें, जैसा कि कहीं और वर्णित है।


10
मैं यह उत्तर युगों पहले लिखता हूं। आजकल मैं उपयोग करता हूं :set pasteऔर :set nopasteइसके बजाय क्योंकि लंबे समय तक रहने के बावजूद, यह याद रखना आसान है और मुझे इसे हर बार देखने की ज़रूरत नहीं है!
thomasrutter

6
कुछ एम्बेडेड सिस्टम में (मुख्य रूप से बिजीबॉक्स पर आधारित) :set pasteलागू नहीं किया जाता है, इसलिए :set noaiइसके बजाय इसका उपयोग किया जाना चाहिए।
जर्कबेलो

जब आपके पास कॉपी करने के लिए एक बड़ा पाठ होता है, तो क्या इसके बजाय + रजिस्टर का उपयोग करना तेजी से नहीं है?
पेड्रोनामेल

1
@pedromanoel जो केवल स्थानीय स्तर पर काम करने पर काम करता है। यह SSH पर विम तक पहुँचने का काम नहीं करेगा, उदाहरण के लिए, यदि आपने स्थानीय रूप से कुछ कॉपी किया है और इसे विम में पेस्ट करना चाहते हैं जो आपके SSH सत्र में है।
thomasrutter

1
@thomasrutter लेकिन मैंने इसे मैप किया <leader>p.. बहुत उपयोगी!
डेन

51

पेस्ट मोड सेट करना paste/nopaste/pastetoggleपूरी तरह से ठीक है, फिर भी आपको पेस्ट करने से पहले पेस्ट मोड को मैन्युअल रूप से सक्षम करना होगा और पेस्ट करने के बाद पेस्ट मोड को अक्षम करना होगा। आलसी व्यक्ति होने के नाते, मैं नीचे सबसे अच्छा समाधान है जो मैंने अब तक पाया है, जो पेस्ट करते समय स्वचालित रूप से पेस्ट मोड को चालू करता है।

यहां थोड़ी सी ट्रिक है जो आपके द्वारा पेस्ट करने पर वीम के पेस्ट मोड को स्वचालित रूप से सेट / अनसेट करने के लिए टर्मिनल के ब्रैकेटेड पेस्ट मोड का उपयोग करता है। अपने .vimrc में निम्नलिखित डालें:

let &t_SI .= "\<Esc>[?2004h"
let &t_EI .= "\<Esc>[?2004l"

inoremap <special> <expr> <Esc>[200~ XTermPasteBegin()

function! XTermPasteBegin()
  set pastetoggle=<Esc>[201~
  set paste
  return ""
endfunction

अब आप बिना किसी स्पष्ट मोड के पेस्ट मोड को चालू / बंद कर सकते हैं - यह आपके लिए स्वचालित रूप से नियंत्रित किया जाता है।

स्रोत: कोडरवॉल

नोट: यह समाधान WSL (लिनक्स के लिए विंडोज 10 सबसिस्टम) में काम नहीं करता है। यदि किसी के पास WSL का समाधान है, तो कृपया इस उत्तर को अपडेट करें या टिप्पणियों में जोड़ें।

Tmux यदि tmux का उपयोग कर रहे हैं, तो घोषणाओं को दोहराए जाने की आवश्यकता है। कोडरवल में इसके लिए कोड भी है


यह ब्रिलिएंट है। हालांकि एक बात ... हर पेस्ट के साथ मुझे हर पेस्ट की शुरुआत में एक "0" (शून्य) चार्जर मिलता है। उसके लिए कोई टिप?
जूलियस Š।

यह भी ध्यान दें कि अगर tmux का उपयोग कर रहे हैं तो आपको डबल भागने की आवश्यकता है। इसके लिए कोड Coderwall के उत्तर में है
Daithí

1
यदि आप भी आलसी हैं और अपने .vimrc में कोड के ऊपर पेस्ट करना चाहते हैं, तो XTermPasteBegin () फ़ंक्शन के इंडेंटेशन का ध्यान रखें।
k1133

मैं उत्सुक था कि यह कैसे काम करता है, और इसलिए मैंने पेस्ट ब्रैकेटिंग की खोज की और gitlab.com/gnachman/iterm2/-/wikis/Paste-Bracketing पाया, जो बताता है कि चर t_SIऔर t_EIचर इसे सक्षम और अक्षम करने में सक्षम हैं। जब पेस्‍ट ब्रैकेटिंग चालू होती है, तो चिपकाया गया पाठ उपसर्ग esc[200~और उसके बाद आता है esc[201~
पैट्स

37

मैक यूजर्स पेस्टबोर्ड से सीधे पढ़कर ऑटो फॉर्मेटिंग से बच सकते हैं:

:r !pbpaste

3
यह एक शानदार प्रतिक्रिया है। जब मैं ऐसा करता हूं, हालांकि, यह दस्तावेज़ छिपाता है (ऐसा लगता है कि मैं कमांड लाइन पर वापस आ गया हूं), लेकिन मेरे क्लिपबोर्ड पर पाठ है। यह मुझे एंटर प्रेस करने के लिए प्रेरित करता है, इसलिए मैं करता हूं, और यह मुझे बिना किसी बदलाव के अपने दस्तावेज़ में वापस कर देता है। क्या हुआ, और आप जो कह रहे हैं मैं कैसे करूँ?
jvriesem

यदि आप बस टाइप करते हैं :.!pbpaste, तो यह पेस्ट बफर के आउटपुट के साथ वर्तमान लाइन को बदलकर काम करना चाहिए। सामान्य तौर पर, विम आपको डेटा को पाइप करने की अनुमति देता है जो आपकी वर्तमान फ़ाइल में किसी अन्य प्रोग्राम में है और कमांड के आउटपुट के साथ टेक्स्ट को प्रतिस्थापित करता है। तो :1,3!pbpasteआपकी फ़ाइल की पहली तीन पंक्तियों को पेस्ट बफर के साथ बदल देता है। मैं :.!ppjsonएक बहुत लंबी (अनफर्टेटेड JSON स्ट्रिंग) का उपयोग करता हूं और इसे प्रारूपित करता हूं और लंबे स्ट्रिंग को स्वरूपित समकक्ष के साथ प्रतिस्थापित करता हूं । ppjson सिर्फ एक बैश स्क्रिप्ट है जो चलती है python -m json.tool
पाट्स

19

यहाँ किसी व्यक्ति द्वारा पोस्ट किया गया है जो यह पता लगाता है कि कैसे पेस्ट इवेंट को स्वचालित रूप से पेस्ट मोड को फिर से चालू करने और फिर वापस बंद करने के लिए। MacOSX पर tmux / iTerm में मेरे लिए काम करता है।


1
पारितोषिक के लिए धन्यवाद। मैंने एक प्लगइन को भी ट्रैक किया है जहां व्यक्ति ने समान कार्यक्षमता को बंडल किया है - stackoverflow.com/a/36512548/255961
स्टूजेक

ऐसा लगता है कि जब मैं अपने क्लिपबोर्ड से पाठ का एक टुकड़ा सम्मिलित करता हूं, तो 'ईईईईई' ​​की एक स्ट्रिंग पैदा होती है।
जॉन जियांग

16

इसे अपने साथ जोड़ें ~/.vimrcऔर आपको चिपकाने से पहले और बाद में केवल F2 दबाना होगा :

set pastetoggle=<F2>

12

मैंने अभी डाला set clipboard=unnamed अपने .vimrc में । यह X के क्लिपबोर्ड पर डिफ़ॉल्ट पेस्ट बफर मैप बनाता है।

इसलिए, यदि मैं एक टर्मिनल में थोड़ा सा पाठ चिह्नित करता हूं, तो मैं इसे केवल pविम में पेस्ट करने के लिए दबा सकता हूं । इसी तरह, मैं चीजों को vim (जैसे) कर सकता हूंYY लिए बफर में करंट लाइन को yank) और इसे पेस्ट करने के लिए किसी भी विंडो में मध्य क्लिक ।

पता नहीं। मुझे यह सुविधाजनक लगता है।


IMHO, यह सबसे अच्छा जवाब है, F11 के साथ टॉगल करने की कोई आवश्यकता नहीं है (जो कि डिफ़ॉल्ट रूप से पूर्वनिर्मित है)। यह macs OSX सिस्टम में काम करता है, मैं दूसरों के बारे में नहीं जानता।
लाइटमैन

9

टर्मिनल के अंदर काम करते समय विम-ब्रैकेटेड-पेस्ट vim प्लगइन पहले या बाद में किसी भी कीस्ट्रोक्स की आवश्यकता के बिना पेस्ट को स्वचालित रूप से हैंडल करेगा।

यह ब्रैकेटेड पेस्ट मोड का पता लगाने के द्वारा काम करता है जो "आधुनिक" एक्स-टर्म संगत टर्मिनलों जैसे iTerm2, सूक्ति-टर्मिनल, और libvte का उपयोग करके अन्य टर्मिनलों द्वारा भेजा गया एक एस्केप अनुक्रम है। अतिरिक्त बोनस के रूप में यह tmux सेशन के लिए भी काम करता है। मैं इसे सफलतापूर्वक iTerm2 के साथ एक मैक सर्वर लिंक से कनेक्ट करने और tmux का उपयोग कर रहा हूं।


आगे जो भी नोट करता है, उससे सावधान रहें: दुर्भाग्य से, इसका मतलब है कि वे इनपुट बफर की सामग्री को भी चलाएंगे यदि आपके द्वारा टर्मिनल में पेस्ट की जाने वाली किसी भी चीज में एक नई रेखा है।
0xc0de

1
@ 0xc0de, वह उद्धरण यहां प्रासंगिक नहीं है। यह बात कर रहा है कि जब शेल ब्रैकेटेड पेस्ट मोड का समर्थन नहीं करता है, तो शेल क्या करेगा । ब्रैकेटेड पेस्ट मोड में वह बिंदु है - ऐसा होने से रोकने के लिए।
sh1

यह अन्य समाधानों की तुलना में मेरे लिए बहुत बेहतर काम किया। धन्यवाद।
जज

8

इसे अपने ~ / .vimrc में चिपकाएँ और खुश रहें:

" enables :Paste to just do what you want
command Paste execute 'set noai | insert | set ai'

संपादित करें: प्रतिबिंब पर, :r !catयह बहुत छोटा दृष्टिकोण है, क्योंकि यह छोटा, शब्दार्थ है और इसके लिए कोई कस्टम विंब की आवश्यकता नहीं है। इसके बजाय उसका उपयोग करें!


5

हालांकि :pastetoggleया :pasteऔर :nopaste(कार्यान्वित करता है, तो - वे हमेशा के रूप में हम चर्चा से देख सकते हैं नहीं कर रहे हैं) काम करना चाहिए ठीक मैं प्रत्यक्ष दृष्टिकोण का उपयोग कर अत्यधिक recomment चिपकाने "+pया "*pऔर के साथ पढ़ने "+rया"*r :

विम के पास दस प्रकार के रजिस्टर ( :help registers) हैं और प्रश्नकर्ता को अनुभाग से quotestarऔर इसमें रुचि हैquoteplus

  1. चयन और ड्रॉप रजिस्टर "*, "+और "~

GUI के लिए चयनित पाठ को संग्रहीत और पुनर्प्राप्त करने के लिए इन रजिस्टरों का उपयोग करें। देखें quotestarऔरquoteplus । जब क्लिपबोर्ड उपलब्ध नहीं है या काम नहीं कर रहा है, तो इसके बजाय अनाम कोड का उपयोग किया जाता है। यूनिक्स प्रणालियों के लिए क्लिपबोर्ड केवल तभी उपलब्ध होता है जब + xterm_clipboard सुविधा मौजूद हो। {वि में नहीं}

ध्यान दें कि X11 सिस्टम के लिए "* और" + के बीच केवल एक अंतर है।

:help x11-selectionआगे स्पष्ट के अंतर *और +:

                                                  quoteplus quote+

तीन प्रलेखित एक्स चयन हैं: PRIMARY (जो वर्तमान दृश्य चयन का प्रतिनिधित्व करता है - जैसा कि विम के विज़ुअल मोड में है), SECONDARY (जो कि अ-परिभाषित है) और CLIPBOARD (जिसका उपयोग कट, कॉपी और पेस्ट ऑपरेशन के लिए किया जाता है) )।

इन तीनों में से, "* रजिस्टर (इसलिए जब X11 सेलेक्शन उपलब्ध हैं, तब पढ़ने और लिखने के लिए VIM PRIMARY का उपयोग करता है), Vim" ऑटोज़ "के 'क्लिपबोर्ड' के लिए एक डिफ़ॉल्ट मान सेट करता है, और" + रजिस्टर पढ़ते और लिखते समय CLIPBOARD। विम सेकंडरी सेलेक्शन को एक्सेस नहीं करता है।

उदाहरण: (डिफ़ॉल्ट विकल्प मान मानकर)

  • विम में विजुअल मोड में एक URL चुनें। अपने ब्राउज़र पर जाएं और URL टेक्स्ट फ़ील्ड में मध्य माउस बटन पर क्लिक करें। चयनित पाठ सम्मिलित किया जाएगा (उम्मीद है!)। नोट: फ़ायरफ़ॉक्स में आप midmouse.contentLoadURL वरीयता को लगभग सही: config में सेट कर सकते हैं, फिर विंडो में अधिकांश स्थानों पर मध्य माउस बटन दबाते समय चयनित URL का उपयोग किया जाएगा।

  • माउस के साथ खींचकर अपने ब्राउज़र में कुछ पाठ चुनें। विम पर जाएं और मध्य माउस बटन दबाएं: चयनित पाठ डाला जाता है।

  • विम में कुछ पाठ का चयन करें और "+ y करें। अपने ब्राउज़र पर जाएं। माउस के साथ खींचकर एक पाठ क्षेत्र में कुछ पाठ का चयन करें। अब सही माउस बटन का उपयोग करें और पॉपअप मेनू से" पेस्ट "चुनें। चयनित पाठ को अधिलेखित कर दिया गया है। Vim से पाठ। ध्यान दें कि "+ रजिस्टर में पाठ दृश्य चयन करते समय उपलब्ध रहता है, जो" * रजिस्टर में अन्य पाठ को उपलब्ध कराता है। इससे पाठ को अधिलेखित करने की अनुमति मिलती है।

मैंने देखा है कि vim में मिडिल क्लिक का उपयोग करने से इंडेंटेशन गड़बड़ नहीं होता है, इसलिए यह एक विचार हो सकता है
Fuseteam

4

यह मेरे लिए काम करता है (+ रजिस्टर के लिए मामला, मैं अप्स के बीच एक्सचेंज बफर की तरह क्या उपयोग करता हूं):

imap <silent> <S-Insert> <C-O>:set noai<CR><C-R>+<C-O>:set ai<CR>

2

यदि आप एक मैक पर हैं, तो मैकविम टॉगल पेस्ट के बिना इसे अच्छी तरह से संभालता है।

काढ़ा स्थापित macvim --override-system-vim


क्या यह मामला है यदि आप ओपी के निर्देशों को अपनी .vimrcफाइल में शामिल करते हैं?
आकर्षित नोक

2

नेटिव पेस्ट / ब्रैकेटेड पेस्ट vim 8(2016 में जारी) के बाद से सबसे अच्छा और सरल तरीका है । यह भी ssh पर काम करता है! (ब्रैकेटेड पेस्ट लिनक्स और मैक पर काम करता है, लेकिन विंडोज गिट बैश नहीं)

  1. सुनिश्चित करें कि आपके पास 8+ है (आपको +clipboardया +xterm_clipboardविकल्पों की आवश्यकता नहीं है )।

    vim --version | head -1

  2. बस सामान्य मोड में ओएस देशी पेस्ट कमांड (जैसे ctrl+shift+Vया cmd+V) का उपयोग करें । iइन्सर्ट मोड के लिए प्रेस न करें।


परीक्षा

  1. सिस्टम क्लिपबोर्ड पर इस (2 लाइनों के टैब इंडेंट के साथ) के आउटपुट की प्रतिलिपि ( ctrl+shift+Cया cmd+C):

    echo -e '\ta\n\tb'

  2. ऑटिंडेंट के साथ एक साफ विम 8+ लॉन्च करें:

    vim -u NONE --noplugin -c 'set autoindent'

  3. नॉर्मल मोड में सिस्टम क्लिपबोर्ड ( ctrl+shift+Vया cmd+V) से पेस्ट करें । दबाओ मतiइन्सर्ट मोड के लिए करें। aऔर bएक ही टैब मांगपत्र के साथ गठबंधन किया जाना चाहिए। आप किसी दूरस्थ मशीन पर ssh-ing करते समय भी ऐसा कर सकते हैं (दूरस्थ मशीन को vim 8+ की आवश्यकता होगी)।

  4. अब पुराने तरीके को आज़माएँ, जो एक अतिरिक्त टैब के साथ दूसरी पंक्ति को स्वतः जोड़ देगा: प्रेस iफॉर इन्सर्ट मोड। फिर पेस्ट का उपयोग कर ctrl+shift+Vया cmd+Vaऔरb अब गलत संरेखित कर रहे हैं।


स्थापित करना विम 8


1
सबसे अच्छा और सरल तरीका! इसके अलावा, Google ने इसे Featured snippetमेरी खोज 'पेस्ट कंटेंट नो टैब्स विम' के लिए सुझाया , शायद इसलिए, मैंने 'टैब' कीवर्ड का उपयोग किया, केवल इस उत्तर में :) :)
डेविड

1

कृपया इस लेख को पढ़ें: कोड पेस्ट के लिए ऑटो-इंडेंटिंग टॉगल करें

कुछ लोग आपके लिए निम्नलिखित विकल्प द्वारा स्थिति लाइन में दिखाई गई दृश्य प्रतिक्रिया पसंद करते हैं vimrc:

nnoremap <F2> :set invpaste paste?<CR>
set pastetoggle=<F2>
set showmode

1

सबसे तेज़ तरीका है मैं के लिए जल्दी से एक शॉट के पेस्ट के लिए पेस्ट डालें करने के लिए मोड जाना बारे में पता कर रहा हूँ tpope की है अछूता है, जो सुविधाओं yoऔर yO, शायद स्मृति सहायकों "आप खुले" के लिए। वे केवल अपने vimdoc में प्रलेखित हैं, जैसे:

टॉगल 'पेस्ट' के लिए प्रदान नहीं किया गया है क्योंकि एकान्त सम्मिलन के लपेटने का विशिष्ट उपयोग मामला इतना बेकार है: आप दो बार टॉगल करते हैं, लेकिन आप केवल एक बार (YOPO) पेस्ट करते हैं। इसके बजाय, पहले से ही सेट 'ओ' के साथ ओ या ओ को लागू करने के लिए यो या यो दबाएं। इन्सर्ट मोड को छोड़ना 'स्वतः' सेट हो जाता है।


1

पेस्ट करने का एक और तरीका <CR>रजिस्टर (यहां वैश्विक रजिस्टर) की सामग्री को छोड़ना और छोड़ना है। देखें: :h i_ctrl-rऔरh i_CTRL-R_CTRL-O

विम मदद प्रलेखन से:
Insert the contents of a register literally and don't auto-indent. Does the same as pasting with the mouse<MiddleMouse>. Does not replace characters! The '.' register (last inserted text) is still inserted as typed.{not in Vi}

तो ऑटो इंडेंट के बिना विम में सामग्री पेस्ट करने के लिए, <CR><CO>*अधिकांश यूनिक्स सिस्टम में उपयोग करें ।

नोट: यह केवल तभी काम करता है जब विम को संकलित किया जाता है clipboard



1

एक और जवाब जो मैंने अब तक नहीं देखा:

:se paste noai

0

अफसोस की बात है कि मुझे यह पता चला कि विम प्लग को iTerm2 3.0.15 के साथ काम नहीं करने का उल्लेख किया गया है (निष्पक्ष होने के लिए मुझे नहीं पता कि यह पुराने संस्करणों पर टूट गया है) - लेकिन मुझे इसके बजाय यह हैक मिला।

मैप कमांड-पी पेस्ट करने के लिए और iTerm2 vim कुंजियों का उपयोग करके। जाहिर है कि यह केवल iTerm2 के लिए काम करता है।

यह काम किस प्रकार करता है। मैं भागने मोड में प्रवेश करने के लिए "jk" का उपयोग करता हूं ताकि आपको भी आवश्यकता होगी:

: इनोरेमैप जे.के.

अपने .vimrc में।

फिर यह सिर्फ P को पेस्ट मोड में प्रवेश करने के लिए आमंत्रित करता है, "+ क्लिपबोर्ड से पेस्ट करने के लिए पी और फिर पेस्ट को निष्क्रिय करने के लिए पी।

यहां छवि विवरण दर्ज करें


1
रुको, क्या, आप इसके लिए 'jk' का उपयोग करते हैं?
०१ --०। डेढ़

अरे हाँ, मैं यह उल्लेख करना भूल गया हूँ। बस अपने .vimrc में ": inoremap jk <esc>" जोड़ें। जैसे कि मैं jk का उपयोग क्यों कर रहा हूं, Apple से पूछें और उन्होंने शारीरिक भागने की कुंजी को स्थानांतरित करने और छुटकारा पाने की आवश्यकता क्यों महसूस की। 8 (
नील मैकगिल

BTW यह कुछ प्रशिक्षण लेता है, लेकिन थोड़ी देर के बाद jk तेजी से लगता है और मुझे लगता है कि मैं इसे अब बच निकलना पसंद करता हूं ... वैसे भी यह जानना दिलचस्प होगा कि iTerm2 <ESC> यहां भी स्वीकार करता है।
नील मैकगिल

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