Sublimetext की तरह विम बहुभाषी संपादन?


133

मैंने gvim का उपयोग करना शुरू कर दिया है, और मैं यह नहीं समझ पा रहा हूं कि gvim में मल्टीलाइन एडिट कैसे काम करता है।

उदाहरण के लिए:

मूल लेख:

asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;

ctrl + q, jjjjjj, $ सब कुछ चुना गया है, फिर मैं एक मल्टीलाइन इन्सर्ट करने के लिए प्रेस करता हूँ।

मेरा इरादा पहली पंक्ति की तरह उद्धरण सम्मिलित करना है, और फिर Esc दबाएं:

asd "asd asd" asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;

क्या हुआ? मुझे एक अचेतन के समान व्यवहार की उम्मीद थी:

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

यदि आपको नहीं पता कि यह कैसे काम करता है, तो यह हर पंक्ति के लिए कार्यों को दोहराता है। वह कैसे प्राप्त कर सकते हैं? और विम यहाँ क्या कर रहा है?


बस पहली पंक्ति को बदलने के लिए एक कीबोर्ड मैक्रो रिकॉर्ड करें और फिर अन्य सभी लाइनों के लिए मैक्रो प्लेबैक करें।
high5

जवाबों:


215

विंडोज संगतता परत को गिराकर अपने आप को एक एहसान करो।

विजुअल-ब्लॉक मोड में प्रवेश करने का सामान्य शॉर्टकट है <C-v>

दूसरों ने रिकॉर्डिंग मैक्रोज़ के साथ निपटाया, यहां कुछ अन्य विचार हैं:

केवल दृश्य-ब्लॉक मोड का उपयोग करना ।

  1. कर्सर को दूसरे शब्द पर रखें:

    asd |a|sd asd asd asd;
    asd asd asd asd asd;
    asd asd asd asd asd;
    asd asd asd asd asd;
    asd asd asd asd asd;
    asd asd asd asd asd;
    asd asd asd asd asd;
    
  2. दृश्य-ब्लॉक मोड में <C-v>प्रवेश करने के लिए मारो और नीचे की ओर अपने चयन का विस्तार करें:

    asd [a]sd asd asd asd;
    asd [a]sd asd asd asd;
    asd [a]sd asd asd asd;
    asd [a]sd asd asd asd;
    asd [a]sd asd asd asd;
    asd [a]sd asd asd asd;
    asd [a]sd asd asd asd;
    
  3. I"<Esc>प्राप्त करने के लिए मारो :

    asd "asd asd asd asd;
    asd "asd asd asd asd;
    asd "asd asd asd asd;
    asd "asd asd asd asd;
    asd "asd asd asd asd;
    asd "asd asd asd asd;
    asd "asd asd asd asd;
    
  4. तीसरे शब्द के अंतिम चार पर कर्सर रखें:

    asd "asd as|d| asd asd;
    asd "asd asd asd asd;
    asd "asd asd asd asd;
    asd "asd asd asd asd;
    asd "asd asd asd asd;
    asd "asd asd asd asd;
    asd "asd asd asd asd;
    
  5. दृश्य-ब्लॉक मोड में <C-v>प्रवेश करने के लिए मारो और नीचे की ओर अपने चयन का विस्तार करें:

    asd "asd as[d] asd asd;
    asd "asd as[d] asd asd;
    asd "asd as[d] asd asd;
    asd "asd as[d] asd asd;
    asd "asd as[d] asd asd;
    asd "asd as[d] asd asd;
    asd "asd as[d] asd asd;
    
  6. A"<Esc>प्राप्त करने के लिए मारो :

    asd "asd asd" asd asd;
    asd "asd asd" asd asd;
    asd "asd asd" asd asd;
    asd "asd asd" asd asd;
    asd "asd asd" asd asd;
    asd "asd asd" asd asd;
    asd "asd asd" asd asd;
    

साथ दृश्य-ब्लॉक मोड और Surround.vim

  1. कर्सर को दूसरे शब्द पर रखें:

    asd |a|sd asd asd asd;
    asd asd asd asd asd;
    asd asd asd asd asd;
    asd asd asd asd asd;
    asd asd asd asd asd;
    asd asd asd asd asd;
    asd asd asd asd asd;
    
  2. दृश्य-ब्लॉक मोड में <C-v>प्रवेश करने के लिए मारो और नीचे और दाईं ओर अपने चयन का विस्तार करें:

    asd [asd asd] asd asd;
    asd [asd asd] asd asd;
    asd [asd asd] asd asd;
    asd [asd asd] asd asd;
    asd [asd asd] asd asd;
    asd [asd asd] asd asd;
    asd [asd asd] asd asd;
    
  3. मारो S"के साथ "अपने चयन के चारों ओर:

    asd "asd asd" asd asd;
    asd "asd asd" asd asd;
    asd "asd asd" asd asd;
    asd "asd asd" asd asd;
    asd "asd asd" asd asd;
    asd "asd asd" asd asd;
    asd "asd asd" asd asd;
    

साथ दृश्य ऑनलाइन मोड और :normal

  1. Vपूरी लाइन का चयन करने के लिए इसे हिट करें और इसे नीचे की ओर विस्तृत करें:

    [asd asd asd asd asd;]
    [asd asd asd asd asd;]
    [asd asd asd asd asd;]
    [asd asd asd asd asd;]
    [asd asd asd asd asd;]
    [asd asd asd asd asd;]
    [asd asd asd asd asd;]
    
  2. इस आदेश को निष्पादित करें: :'<,'>norm ^wi"<C-v><Esc>eea"<CR>प्राप्त करने के लिए:

    asd "asd asd" asd asd;
    asd "asd asd" asd asd;
    asd "asd asd" asd asd;
    asd "asd asd" asd asd;
    asd "asd asd" asd asd;
    asd "asd asd" asd asd;
    asd "asd asd" asd asd;
    
    • :norm[al]आप लाइनों की एक सीमा पर सामान्य मोड कमांड को निष्पादित करने की अनुमति देता है ( '<,'>भाग स्वचालित रूप से विम द्वारा जोड़ा गया है और इसका अर्थ है "चयनित क्षेत्र पर कार्य करें")

    • ^ कर्सर को लाइन के पहले चार पर रखता है

    • w अगले शब्द के लिए कदम

    • i""कर्सर से पहले आवेषण

    • <C-v><Esc>इस संदर्भ में एक कंट्रोल कैरेक्टर इनपुट करने के लिए विम का तरीका है, यहां इसे डालने मोड <Esc>से बाहर निकलने के लिए उपयोग किया जाता है

    • ee अगले शब्द के अंत में जाता है

    • a""कर्सर के बाद जोड़ता है

    • <CR> कमांड निष्पादित करता है

    Surround.vim का उपयोग करना, ऊपर का आदेश बन जाता है

    :'<,'>norm ^wvees"<CR>
    

7
चरण 4 और 5 के लिए, मैं gvआपके पिछले दृश्य चयन को वापस लेने के लिए टकराने की सलाह दूंगा , और फिर क्षैतिज रूप से, शायद साथ 2e। (अधिक पंक्तियाँ, और अधिक मूल्यवान gvहै!)
joeytwiddle

4
चारों ओर sSS"
.vim

1
विज़ुअल-ब्लॉक + S"s"
सराउंड.विम

1
दृश्य-ब्लॉक मोड चरण 5 और 6 के बजाय आप बस तीसरे शब्द के बाद कर्सर रख सकते हैं और दबा सकते हैं .
जोनास

2
यह शांत है, लेकिन यह केवल कुछ मामलों में काम करता है जहां आप जिन वर्णों को विभिन्न रेखाओं पर संपादित करना चाहते हैं, वे प्रत्येक पंक्ति में समान क्षैतिज स्थिति में हैं, और संपादित पंक्तियाँ एक के बाद एक सही हैं। कठबोली हम चेरी लेने जहां विम में किस लाइन पर संपादन मोड में प्रवेश करने के लिए? हम सबलीम में कर सकते हैं ... संपादित करें: वास्तव में दूसरा उत्तर वह है जिसकी मुझे तलाश थी
अलेक्जेंड्रे बॉलीयर

30

वे ऊपर दिए गए कुछ अच्छे आउट-ऑफ-द-बॉक्स समाधान हैं, लेकिन हम कुछ प्लगइन्स भी आज़मा सकते हैं जो सबलाइम जैसे कई कर्सर प्रदान करते हैं।

मुझे लगता है कि यह एक आशाजनक लग रहा है:

यह थोड़ी देर के लिए छोड़ दिया गया था, लेकिन 2014 में कुछ योगदान दिया है।

यह काफी शक्तिशाली है, हालांकि प्रवाह में उपयोग करने के लिए मुझे थोड़ा समय लगा (जो कि काफी सब-लाइक है लेकिन फिर भी विम जैसा मोडल है)।

मेरे अनुभव में यदि आपके पास बहुत सारे अन्य प्लगइन्स स्थापित हैं, तो आप कुछ संघर्षों को पूरा कर सकते हैं!

इस सुविधा में कुछ अन्य प्रयास हैं:

अगर आपको इनमें से कोई भी सुधार दिखाई दे तो कृपया बेझिझक संपादित करें।


ऐसा लगता है कि github.com/osyo-manga/vim-over इस समय गुच्छा का सबसे अधिक सक्रिय है।
वर्नट

बहुत बढ़िया, यह वही है जिसकी मुझे तलाश थी
अलेक्जेंड्रे बॉलीयर

1
परीक्षण के बाद उनमें से अधिकांश hlissner / vim-multiedit सबसे अच्छा AFAIAC लगता है
एलेक्जेंडर बॉलीयर

1
चेक mg979 / vim-दृश्य-बहु के लिए एक अच्छा विकल्प के रूप में vim-बहु-कर्सर
Mushex Antaranian

29

विम में उसे पूरा करने के कई तरीके हैं। मुझे नहीं पता कि यह सबलेम टेक्स्ट के सबसे अधिक समान हैं, हालांकि।


पहला मल्टीलाइन इन्सर्ट मोड के माध्यम से होगा । अपने कर्सर को पहली पंक्ति में दूसरे "ए" पर रखें Ctrl-V, प्रेस करें , सभी लाइनों का चयन करें, फिर दबाएं I, और एक डबलक्वाट में डालें। दबाने <esc>से हर लाइन पर ऑपरेशन दोहराया जाएगा।


दूसरा एक मैक्रोज़ के माध्यम से है। पहले पात्र पर कर्सर रखें, और एक मैक्रो के साथ रिकॉर्डिंग शुरू करें qa। अपने अधिकार के साथ जाएं llll, इन्सर्ट मोड डालें a, साथ में एक डबलक्वाओट डालें, इंसर्ट मोड से बाहर निकलें, और <home>(या समतुल्य) के साथ अपनी पंक्ति की शुरुआत में वापस जाएं । jएक पंक्ति नीचे जाने के लिए दबाएँ । के साथ रिकॉर्डिंग बंद करो q। और फिर मैक्रो के साथ फिर से खेलना @a। बहुत बार।


क्या उपरोक्त दृष्टिकोण आपके लिए काम करता है?


15

यदि आप "वैश्विक" कमांड का उपयोग करते हैं, तो आप किसी भी संख्या में ऑनलाइन क्या कर सकते हैं, इसे दोहरा सकते हैं।

:g/<search>/.<your ex command>

उदाहरण:

:g/foo/.s/bar/baz/g

उपरोक्त कमांड सभी पंक्तियों को खोजता है जिसमें फू है, और उस लाइन पर बार की सभी घटनाओं को बाज के साथ बदल देता है।

:g/.*/

हर लाइन पर करेंगे


1
यह बहुत उपयोगी है, मुझे यह पता नहीं था। आदेशों का इतना शक्तिशाली और चतुर संयोजन लगता है।
0xc0de

सुविधा के लिए, मैंने एक छोटा सा फ़ंक्शन लिखा है जो शब्द को कर्सर के नीचे ले जाता है (या नेत्रहीन चयनित शब्द), एक प्रतिस्थापन के लिए संकेत देता है, और फिर :gयहां वर्णित कमांड चलाता है। मैं का उपयोग करना चाहते /gc"पुष्टि" के लिए पूछने के लिए तो मैं हिट कर सकते हैं yया nप्रत्येक प्रतिस्थापन के लिए, या aउन सभी को बदलने के लिए।
joeytwiddle

11
Ctrl-v ................ start visual block selection
6j .................... go down 6 lines
I" .................... inserts " at the beginning
<Esc><Esc> ............ finishes start
2fdl. ................. second 'd' l (goes right) . (repeats insertion)

चरण 3 में, Iइन्सर्ट मोड दर्ज नहीं कर सकते, क्या आप जानते हैं कि ऐसा क्यों होता है?
निंजा

कोई प्लगइन्स के साथ विम लोड करने का प्रयास करें: vim -u NONEऔर फिर से वांछित कार्रवाई करने की कोशिश करें, यह आपके विम के व्यवहार को बदलने वाला कुछ नक्शा या प्लगइन हो सकता है।
सर्जियोआरावो

6

मुझे यकीन नहीं है कि क्या vimकर रहा है, लेकिन यह एक दिलचस्प प्रभाव है। जिस तरह से आप वर्णन कर रहे हैं कि आप चाहते हैं कि मैक्रोज़ कैसे काम करें ( :help macro)। कुछ ऐसा होगा जो आप मैक्रोज़ के साथ चाहते हैं (सामान्य मोड में शुरू):

  1. qa: रिकॉर्ड मैक्रो aरजिस्टर करने के लिए ।
  2. 0w: 0गोटो शुरू लाइन, wएक शब्द कूदो।
  3. i"<Esc>: इन्सर्ट-मोड डालें, इंसर्ट करें "और नॉर्मल-मोड पर लौटें।
  4. 2e: दूसरे शब्द के अंत में कूदो।
  5. a"<Esc>: अपेंड करें "
  6. jq अगली पंक्ति में जाएं और मैक्रो रिकॉर्डिंग समाप्त करें।

एक साथ लिया: qa0wi"<Esc>2ea"<Esc>

अब आप मैक्रो को निष्पादित कर सकते हैं @a, पिछले मैक्रो को साथ दोहरा सकते हैं @@। शेष फ़ाइल पर लागू करने के लिए, कुछ ऐसा करें99@a जिसमें मान लिया जाए कि आपके पास 99 से अधिक लाइनें नहीं हैं, फ़ाइल के अंत तक पहुंचने पर मैक्रो निष्पादन समाप्त हो जाएगा।

यहां बताया गया है कि आप क्या हासिल करना चाहते हैं visual-block-mode(सामान्य मोड में शुरू)

  1. उस पर नेविगेट करें जहाँ आप चाहते हैं कि पहली बोली हो।
  2. दर्ज करें visual-block-mode, उन पंक्तियों का चयन करें जिन्हें आप प्रभावित करना चाहते हैं, Gफ़ाइल के नीचे जाने के लिए।
  3. मारो I"<Esc>
  4. अगले स्थान पर ले जाएँ जहाँ आप सम्मिलित करना चाहते हैं "
  5. आप वही दोहराना चाहते हैं जो आपने अभी-अभी किया है जो कि एक साधारण बात .होगी।

4
99 @ a की कोई आवश्यकता नहीं है। यदि आप किसी फ़ाइल की प्रत्येक पंक्ति पर एक मैक्रो निष्पादित करना चाहते हैं:% मानदंड! @ए।
Rook

डॉट्स के बिना (वे वाक्यों के अंत में हैं, आज्ञाओं का हिस्सा नहीं)
Rook

9999@aबदसूरत हो सकता है लेकिन यह टाइप करना बहुत आसान है :%norm! @aऔर यह आपके द्वारा संपादित की गई लाइन पर फिर से नहीं चलता है। फिर भी इसे जानना अच्छा है। :)
joeytwiddle

0

मेरा समाधान इन 2 मैपिंग का उपयोग करना है:

map <leader>n <Esc><Esc>0qq
map <leader>m q:'<,'>-1normal!@q<CR><Down>

उनका उपयोग कैसे करें:

  1. अपनी लाइनों का चयन करें। अगर मैं अगली 12 पंक्तियों का चयन करना चाहता हूं तो मैं सिर्फ प्रेस करता हूंV12j
  2. दबाएँ <leader>n
  3. लाइन में अपने बदलाव करें
  4. सुनिश्चित करें कि आप सामान्य मोड में हैं और फिर दबाएँ <leader>m

एक और संपादन करने के लिए आपको फिर से चयन करने की आवश्यकता नहीं है। बस प्रेस करें <leader>n, अपना संपादन करें और <leader>mलागू करने के लिए दबाएं ।


यह कैसे काम करता है:

  • <Esc><Esc>0qq दृश्य चयन से बाहर निकलें, लाइन की शुरुआत में जाएं और मैक्रो रिकॉर्ड करना शुरू करें।

  • q मैक्रो रिकॉर्ड करना बंद करें।

  • :'<,'>-1normal!@q<CR> दृश्य चयन की शुरुआत से अंत तक लाइन से पहले, प्रत्येक पंक्ति पर मैक्रो खेलें।

  • <Down> अंतिम पंक्ति पर वापस जाएं।


आप बस एक ही कुंजी को मैप कर सकते हैं लेकिन विभिन्न मोड के लिए:

vmap <leader>m <Esc><Esc>0qq
nmap <leader>m q:'<,'>-1normal!@q<CR><Down>

यद्यपि यह एक और संपादन करने की आपकी क्षमता को गड़बड़ कर देता है। आपको अपनी लाइनों को फिर से चुनना होगा।

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