मैं केवल पाठ को पूर्ववत कैसे करूँ?


10

टी एल; डॉ; संस्करण - मैं उस पाठ को पूर्ववत कैसे कर सकता हूं जो मेरे OS कॉपी बफ़र में बिना किसी अन्य पाठ को पूर्ववत किए बिना टाइप किया गया था, क्योंकि मैं डालने के मोड में गया था?

लंबा विवरण:

  1. अपने ओएस कॉपी बफर में कुछ डालें (जैसे कुछ टेक्स्ट को हाइलाइट करें और Command-cमैक पर करें)
  2. विम ( i) में इन्सर्ट मोड में जाएँ
  3. कुछ टाइप करें (जैसे asdf)
  4. डालने मोड से बाहर निकलने के बिना, अपनी कॉपी बफर से विम में चिपकाएँ ( Command-vमैक पर)
  5. मारो escape
  6. पेस्ट को पूर्ववत करने का प्रयास करें ( u)

पिछली बार जब आप इन्सर्ट मोड में गए थे, तब से यह सबकुछ मिटा देता है। अन्य पासवर्डों में, यह asdfमेरे द्वारा पेस्ट किए गए सभी पाठ को साफ़ करता है।

मैं केवल उस पाठ को पूर्ववत कैसे कर सकता हूं , जिसमें चिपकाया गया था क्या मुझे हमेशा पेस्ट मोड से बाहर जाना होगा और पेस्ट करने से पहले पेस्ट किए गए टेक्स्ट को पूर्ववत करने का विकल्प रखना होगा?

जवाबों:


4

एक तरीका स्पष्ट रूप से पेस्ट से पहले डालने और मोड में वापस छोड़ने का है। यदि आप पेस्ट कमांड का विस्तार करते हैं, तो आप पेस्ट से पहले अपने आप एक पूर्ववत बिंदु भी सेट कर सकते हैं :

" Any text fragment pasted in insert mode should be undone separately, without
" destroying what was typed before.
inoremap <C-R> <C-G>u<C-R>

उपरोक्त अंतर्निहित i_CTRL-Rकमांड के लिए है। मैं पता नहीं कैसे Command-vMacVim में कार्यान्वित किया जाता है, लेकिन prepending <C-G>uके लिए :imapआदेश में एक ही प्रभाव को प्राप्त करना चाहिए।


1
एक आकर्षण की तरह काम करता है, धन्यवाद! मैं शायद वैसे भी चिपकाने के लिए मानक vim तरीकों के साथ रहना चाहिए।
जावीद जमा

बस इसे जोड़ना: :h i_CTRL-G_u(जैसे, "पूर्ववत क्रम को तोड़ें, नया बदलाव शुरू करें" इन्सर्ट मोड में)।
टोरिटेट

2

MacVim में, Edit > Pasteशॉर्टकट को ओवरराइड करने के लिए आपको मेनू आइटम को अनमैप करना होगा , फिर आप Cmd-V ( D-vMacVim parlance) में प्रत्येक मोड में उपयुक्त कमांड को रीमैप कर सकते हैं । मैंने इसे अपने साथ जोड़ा ~/.gvimrcऔर अब सब कुछ आश्चर्यजनक रूप से काम करता है:

macmenu Edit.Paste key=<nop>
noremap <D-v> "*P
cnoremap <D-v> <C-r><C-o>*
inoremap <D-v> <C-g>u<C-r><C-o>*

<C-g>uकेवल डालने मोड पूर्ववत इतिहास को ठीक करने के लिए आवश्यक है; noremapऔर cnoremapबस सामान्य और आदेश मोड में डिफ़ॉल्ट पेस्ट व्यवहार बहाल करने के लिए कर रहे हैं।

यहां सही दिशा में इशारा करने के लिए इंगो करकट को धन्यवाद।


1

वास्तव में समाधान यह है कि आपको कमांड मोड (उदाहरण Esc) पर जाना है और पहले सम्मिलित मोड में फिर से प्रवेश करना है, लेकिन यह केवल तभी काम करता है जब मैं मैन्युअल रूप से टाइप करता हूं लेकिन ऐसा लगता है कि अगर मैं इसमें परीक्षण करता हूं तो यह "रैंडमली" काम करना बंद कर देता है ~/.vimrc। Google बिल्कुल भी मदद नहीं करता है।

मैं इस मुद्दे को ठीक करने में बहुत समय बिताता हूं और मैं अपने मामले में कारण का पता लगाता हूं:

टर्मिनल मौजूदा पेस्ट कुंजी के साथ पेस्ट कुंजी को मैप न करें

उदाहरण Ctrl+Shift+Vमेरे कोनो कंसोल टर्मिनल में पेस्ट होगा, लेकिन अगर मैं इस कुंजी <C-S-v>को असाइन करता हूं ~/.vimrc, तो "कई पेस्ट के बजाय केवल एकल पेस्ट के लिए पूर्ववत करें" काम नहीं करेगा।

मेरे मामले में, मुझे <C-v>इसके बजाय उपयोग करना होगा <C-S-v>:

inoremap <C-v> <Esc>"+pi<Esc>i<Right><Right>

आपके मामले में अंतर हो सकता है, लेकिन बिंदु समान है: मौजूदा टर्मिनल एमुलेटर कुंजी के साथ एक ही पेस्ट कुंजी संघर्ष निर्दिष्ट न करें।

मैंने अपने टर्मिनल पेस्ट कुंजी को सेट करके 100% इस निष्कर्ष को साबित कर दिया है Ctrl+Vऔर अब <C-v>काम करना बंद कर रहा है लेकिन <C-S-v>काम कर रहा है।

ध्यान दें कि विम बहुत संवेदनशील और अजीब है। मुझे पता है कि मुझे उपयोग करना है iऔर फिर 2 सही चाबियाँ मैन्युअल रूप से सही कर्सर स्थिति में काम करने के लिए, इसका मतलब है कि मुझे भी डाल देना है iऔर 2 सही चाबियाँ ~/.vimrcभी। आपके मामले में अंतर हो सकता है, लेकिन बिंदु एक ही है, आप जो भी मैन्युअल रूप से लिखते हैं उसके साथ ~ / .vimrc 100% मैच में कुंजी + आदेश सुनिश्चित करें।

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