हमेशा उपयोग करें: पेस्ट सेट करें, क्या यह एक अच्छा विचार है?


19

एक टर्मिनल विम में, क्लिपबोर्ड डेटा चिपकाने से अक्सर कोड इंडेंट गड़बड़ हो जाता है। मुझे सिर्फ इतना पता था कि अगर मैं :set pasteइंडेंट का इस्तेमाल करता हूं तो टूटा नहीं। हालांकि, डेटा चिपकाने के बाद, मुझे :set nopasteफिर से करना चाहिए ? क्या होगा अगर मैं नहीं, क्या समस्या आती है?


अपने बारे में क्या कोशिश कर रहा है? या प्रलेखन पढ़ना ?
रोमेल

1
मेरे जवाब में "ब्रैकेटेड पेस्ट मोड" को "विंडो में कोडिंग कोड को वीआईएम" stackoverflow.com/a/7053522/754997 पर देखें । यदि आपका टर्मिनल एमुलेटर इसका समर्थन करता है, तो जब भी आप टर्मिनल में टेक्स्ट पेस्ट करते हैं, तो आप इसे विम मोड पर / से पेस्ट मोड पर स्विच करने के लिए कहने की व्यवस्था कर सकते हैं।
क्रिस पेज

1
@romainl मुझे यह काफी प्रशंसनीय लगता है कि दोनों 1) कोशिश कर रहे हैं और यह देखने के लिए इंतजार कर रहे हैं कि क्या सेट पेस्ट (+ - nopaste) का उपयोग करने के हमेशा नकारात्मक परिणाम होते हैं, और 2) rtfm-ing (ओपी की तरह एक निम्न या मध्यवर्ती स्तर उपयोगकर्ता के रूप में) , उन लोगों से पूछने से कम उपयोगी है जिनके पास विकल्पों के साथ अनुभव है। यहां पूछने पर एक चालाक दृष्टिकोण लगता है, और यह दस्तावेजीकरण दूसरों की मदद करेगा।
बेलाक्वा

जवाबों:


5

जैसा कि अन्य ने लिखा है, आप 'पेस्ट' सेट नहीं छोड़ना चाहते हैं। मैं बस यह बताना चाहता था कि एक अच्छे टर्मिनल एमुलेटर और एक ठीक से संकलित और कॉन्फ़िगर किए जाने के साथ vim, आपको 'पेस्ट' बदलने की आवश्यकता नहीं है। आपको एक अच्छा टर्मिनल एमुलेटर जैसे xterm या GNOME टर्मिनल की आवश्यकता होती है, जिसमें X11 फीचर शामिल है, और 'a' पर सेट 'माउस' विकल्प। तब vim"पता" होगा जब आप माउस के साथ चिपक रहे हैं और प्रभावी रूप से आपके लिए 'पेस्ट' विकल्प को सेट और अनसेट कर देंगे।

vimX11 सुविधा के साथ आने का एक तरीका विकल्प के gvimसाथ चलना -vया एक उपनाम बनाना है,

alias vim='gvim -v'

फिर रखें

set mouse=a

अपने ~ / .vimrc में।


जब मैं माउस = ए सेट करता हूं, तो मैं टेक्स्ट को कॉपी नहीं कर सकता। "कॉपी" राइट-क्लिक मेनू में और ऐप मेनू में धूसर हो जाता है।
ली डैनियल क्रोकर

@LeeDanielCrocker: Copyजब तक कुछ पाठ का चयन नहीं किया जाता है, तब तक वह धूसर हो जाएगा या दिखाई नहीं देगा। आप कॉपी किए जाने वाले पाठ का चयन कैसे कर रहे हैं?
गैरीजोन

बस माउस के साथ। FYI करें, "y" ठीक काम करता है ... पाठ को yanks करता है और इसे सिस्टम कीबोर्ड पर कॉपी करता है। यह सिर्फ मेनू है जो काम नहीं करता है। यदि माउस "आर" पर सेट है, तो मेनू काम करता है, लेकिन माउस में लाइन नंबर शामिल हैं। तो सभी में, मैं माउस = ए के साथ रह सकता हूं, मुझे बस कॉपी के बजाय यैंक को याद रखना होगा।
ली डेनियल क्रोकर

7

इस पोस्ट का मेरा पसंदीदा उत्तर है, https://coderwall.com/p/if9mda/automatically-set-paste-mode-in-vim-when-pasting-in-insert-mode

मूल रूप से यदि आप इन्सर्ट मोड में शुरू करते हैं और अपने माउस के साथ Ctrl + Shift + V या राइट क्लिक पेस्ट का उपयोग करते हैं, Vim यह पता लगाता है कि यह टर्मिनल से आया है और स्वचालित रूप से पेस्ट मोड सेट करता है, तो इसे एक बार अनसेट कर देता है, इसलिए आप रीमैप कीज़ को नहीं खोते (जो पेस्ट मोड में काम नहीं कर सकता क्योंकि इसका राइटिंग रॉ डेटा है) और जब यह किया जाता है तो आप "साने" स्थिति में वापस आ जाते हैं।

सिर्फ विम के लिए (अपने .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

यदि आप Tmux के तहत विम का उपयोग करते हैं (अभी भी .vimrc में जाता है)

function! WrapForTmux(s)
  if !exists('$TMUX')
    return a:s
  endif

  let tmux_start = "\<Esc>Ptmux;"
  let tmux_end = "\<Esc>\\"

  return tmux_start . substitute(a:s, "\<Esc>", "\<Esc>\<Esc>", 'g') . tmux_end
endfunction

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

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

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

मुझे लगता है कि इनमें से एक let &t_SI .= "\<Esc>[?xxxxx"लाइन कीबोर्ड पेस्ट शॉर्टकट का पता लगा रही है? मैक के लिए यह काम करता है साथ ही अलग शॉर्टकट दिया?
डबल

@ double1ejack ये वास्तव में Xterm एस्केप सीक्वेंस का पता लगा रहे हैं, न कि उन्हें कैसे बुलाया गया (यानी 2004 एक पेस्ट शुरू है) जब तक कि आपका टर्मिनल Xterm कीकोड का समर्थन करता है और उन्हें Vim से गुजरता है, यह मैक पर ठीक होना चाहिए।
ड्रैगन 788

हे भगवान। आप मेरे हीरो हैं। मैंने टाइप किया है: nopaste सेट तो कई बार होगा।
मैक्सवेल

3

जैसा कि रोमेल ने सुझाव दिया था, प्रलेखन बताता है कि 'paste'विकल्प सेट करना कई अन्य विकल्पों को अक्षम करता है, और आप निश्चित रूप से पाएंगे कि बाद में इसके बजाय जल्द ही आपके लिए समस्याएं पैदा करेगा। इस कारण से, वहाँ 'pastetoggle'विकल्प है। देख:

:help 'paste'
:help 'pastetoggle'

1

यदि कुछ मौजूद है, तो इसका अर्थ होना चाहिए। आपको vim प्रलेखन पर एक अच्छी नज़र डालनी चाहिए जो बहुत उपयोगी है।

  :help 'paste'
  :help 'pastetoggle'

एक बार जब आप पढ़ लेते हैं, तो आप यह चाहते हैं:

" Toggle paste mode
"   (prefer this over 'pastetoggle' to echo current state)
nmap <leader>p :setlocal paste! paste?<cr>

मुझे उम्मीद है कि आपको यह पोस्ट उपयोगी लगी होगी :)


1

IIRC जब आप विम में पेस्ट करते हैं, तो यह अनिवार्य रूप से सोचता है कि आपने उन सभी पात्रों को टाइप किया है। इसलिए यदि ऑटो-इंडेंट चालू है, तो यह आपके लिए सामान इंडेंट करेगा, लेकिन पेस्ट किए गए पाठ में आमतौर पर इंडेंटेशन होता है, इसलिए इंडेंट वास्तव में "गड़बड़" हो जाता है। पेस्ट मोड में स्विच करने से ऑटो-इंडेंट जैसे सामान बंद हो जाते हैं।

यदि आप ऑटो-इंडेंट को आप-जैसा-प्रकार पसंद करते हैं, तो आपको पेस्ट करने के बाद इसे वापस nopaste में स्विच करना चाहिए। इसे आज़माएं और ध्यान दें कि आपको पेस्ट मोड में मैन्युअल रूप से सभी इंडेंटेशन कैसे करना है।

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