विम कॉपी / पेस्ट मेसेंटिंग मेसेंटिंग


6

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

उदाहरण के लिए, अभी-अभी मैंने क्रोम एक्सटेंशन बनाने के लिए हेलो-वर्ल्ड ट्यूटोरियल से मैनिफ़ेस्ट.जॉसन फ़ाइल को कॉपी करने की कोशिश की।

यह इस तरह दिख रहा है:

{
  "manifest_version": 2,

  "name": "One-click Kittens",
  "description": "This extension demonstrates a browser action with kittens.",
  "version": "1.0",

  "permissions": [
    "https://secure.flickr.com/"
  ],
  "browser_action": {
    "default_icon": "icon.png",
    "default_popup": "popup.html"
  }
}

लेकिन, जब मैं इसे विम में पेस्ट करता हूं, तो यह ऐसा दिखता है: यहाँ छवि विवरण दर्ज करें

मेरा vimrc निम्नानुसार है:

"se t_Co=256
syntax enable

set nowrap
set mouse=a
set tabstop=4
set softtabstop=4
set shiftwidth=4
set expandtab 
set number
set showcmd
set cursorline
set showmatch

execute pathogen#infect()
"filetype plugin indent on

"folding settings
set foldmethod=indent   "fold based on indent
set foldnestmax=10      "deepest fold is 10 levels
set nofoldenable        "dont fold by default
set foldlevel=1            

set clipboard=unnamed  "share one clipboard for everyhting    

इस लाइन के साथ कुछ करना है:

execute pathogen#infect() "filetype plugin indent on

अगर मैं इसे टिप्पणी करता हूं, तो समस्या हल हो गई है। हालाँकि, जब मैं अजगर में कोडिंग कर रहा हूं, तो ऑटो-इंडेंट प्राप्त करने के लिए इसका उपयोग करता हूं। क्या ऑटो-इंडेंट पाने का एक और तरीका है?


मध्य माउस बटन के साथ, आप कैसे पेस्ट करेंगे? :help 'paste'स्पष्टीकरण के लिए पढ़ें और चिपकाने से पहले / बाद में उस विकल्प को टॉगल करें, या विम के भीतर से पेस्ट करें (रजिस्टर के माध्यम से +, उदाहरण के लिए "+p
इनार्को करकट

woah, इसलिए मैंने हमेशा राइट-क्लिक करके और पेस्ट का चयन करके चिपकाया है, लेकिन मैंने इसे केवल मध्य माउस बटन के साथ आज़माया है और यह अपेक्षित है।
ल्यूक

आह, महान! मैंने अपनी टिप्पणी को उचित उत्तर में विस्तारित किया है; कृपया इसके आगे उल्लिखित चेकमार्क पर क्लिक करके स्वीकार करें।
इंगो करकट

जवाबों:


7

टर्मिनल में, विम टाइप किए गए पाठ (जहां आप स्वचालित इंडेंटिंग चाहते हैं), और चिपकाए गए पाठ के बीच अंतर नहीं कर सकते। तो वहाँ 'paste'विकल्प (और 'pastetoggle'हैंडलिंग को आसान बनाने के लिए) है, जो सेट करते समय ऑटो-स्वरूपण और -indenting को अक्षम करता है। एक विकल्प ग्राफिकल GVIM का उपयोग कर रहा है, जो यह पता लगा सकता है।

या, आप विम के क्लिपबोर्ड एक्सेस का उपयोग करते हैं (यदि कॉन्फ़िगर किया गया है और काम कर रहा है, जिसे आपको आज़माने की आवश्यकता है), और चयन / सिस्टम क्लिपबोर्ड के लिए "*/ "+रजिस्टरों का उपयोग करें , जैसे कि के माध्यम से "+pया :put +। शायद मध्य माउस बटन के साथ चिपकाना भी सिर्फ काम करता है; कोशिश करके देखो!


7

: पेस्ट सेट करें

या देखें http://vim.wikia.com/wiki/Toggle_auto-indenting_for_code_paste

(Herearesomecharsbecausesuperuser.comthinksshortanswersarenotanygoodanswers)


इस समस्या को ठीक नहीं किया
ल्यूक

इसने मेरे लिए काम किया। डालने के मोड के बाहर मैंने :set pasteकमांड टाइप किया , एंटर मारा, फिर कमांड + वी (मैं मैक पर हूं) को पेस्ट करने के लिए, और इसने इंडेंटेशन को गड़बड़ किए बिना मेरी सामग्री को चिपकाया। : सेट पेस्ट यह स्वयं नहीं करता है, यह सिर्फ इसे सेट करता है ताकि आप इसे कर सकें। शायद :set nopasteबाद में नियमित रूप से विम सुविधाओं को वापस लाने की आवश्यकता है।
RustyToms

1

एक संभावना, जो आपके लिए एक विकल्प नहीं हो सकती है, gvimइसके बजाय उपयोग करना है vim। उत्तरार्द्ध तेजी से पाठ टाइपिंग से पेस्टिंग को भेद करने में सक्षम है। के vimलिए मदद से :paste:

'paste'                 boolean (default off)
                         global                        {not in Vi}
        Put Vim in Paste mode.  This is useful if you want to cut or copy
        some text from one window and paste it in Vim.  This will avoid
        unexpected effects.
        Setting this option is useful when using Vim in a terminal, where Vim
        cannot distinguish between typed text and pasted text.  In the GUI, Vim
        knows about pasting and will mostly do the right thing without 'paste'
        being set.  The same is true for a terminal where Vim handles the
        mouse clicks itself.
        This option is reset when starting the GUI.  Thus if you set it in
        your .vimrc it will work in a terminal, but not in the GUI.  Setting
        'paste' in the GUI has side effects: e.g., the Paste toolbar button
        will no longer work in Insert mode, because it uses a mapping.
        When the 'paste' option is switched on (also when it was already on):
                - mapping in Insert mode and Command-line mode is disabled
                - abbreviations are disabled
                - 'textwidth' is set to 0
                - 'wrapmargin' is set to 0
                - 'autoindent' is reset
                - 'smartindent' is reset
                - 'softtabstop' is set to 0
                - 'revins' is reset
                - 'ruler' is reset
                - 'showmatch' is reset
                - 'formatoptions' is used like it is empty
        These options keep their value, but their effect is disabled:
                - 'lisp'
                - 'indentexpr'
                - 'cindent'
        NOTE: When you start editing another file while the 'paste' option is
        on, settings from the modelines or autocommands may change the
        settings again, causing trouble when pasting text.  You might want to
        set the 'paste' option again.
        When the 'paste' option is reset the mentioned options are restored to
        the value before the moment 'paste' was switched from off to on.
        Resetting 'paste' before ever setting it does not have any effect.
        Since mapping doesn't work while 'paste' is active, you need to use
        the 'pastetoggle' option to toggle the 'paste' option with some key.

0

इस समस्या का एक सबसे अच्छा समाधान जो मुझे मिला है वह है ब्रैकेटेड पेस्ट प्लगइन का उपयोग करना: https://github.com/ConradIrwin/vim-bracketed-paste - यह आपको इंडेंटेशन की चिंता किए बिना सीधे विम में पेस्ट करने की अनुमति देता है जा रहा है .. और आदि चिपकाने से पहले विभिन्न कुंजी हिट करने की आवश्यकता के बिना

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