अंतरिक्ष का उत्पादन किए बिना लाइनों में कैसे जुड़ें?


72

Jलाइनों में शामिल होने के लिए मानक कमांड एक स्थान के साथ न्यूलाइन वर्ण (एस) को बदल देता है। 'साहित्य' का संपादन करते समय यह उपयोगी है, लेकिन अगर मैं कहूं तो मैं हाथ से एक हेक्स डंप संपादित कर सकता हूं, अगर मैं फालतू जगह को हटाना भूल जाऊं।

क्या उनके बीच एक जगह का निर्माण किए बिना दो लाइनों में शामिल होने के लिए एक त्वरित और आसान तरीका है?

जवाबों:


86

gJसंयोजन करता है; से :help gJ:

कम से कम दो पंक्तियों के साथ [गिनती] पंक्तियों में शामिल हों। किसी भी स्थान को सम्मिलित या निकालें नहीं।

Jयदि आप एक कीस्ट्रोके को बचाना चाहते थे, तो आप इसके लिए विद्रोह कर सकते थे:

:nnoremap J gJ

ध्यान दें कि यह किसी भी स्थान को नहीं हटाता है , इसलिए यदि या तो वर्तमान रेखा एक स्थान के साथ समाप्त होती है या अगली पंक्ति एक या अधिक रिक्त स्थान से शुरू होती है, तो उन्हें छोड़ दिया जाएगा

इसलिए:

Hello
    world

हो जाता है:

Hello    world

हम इस मामले में उपयोग कर सकते हैं Jx, तो यह होगा Helloworld, लेकिन यह सभी मामलों में काम नहीं करेगा; मदद से:

कम से कम दो लाइनों के साथ, हाइलाइट की गई लाइनों से जुड़ें। इंडेंट निकालें और दो स्थानों तक डालें

[...]

"जीजे" को छोड़कर, ये कमांड तब तक एक जगह डालें, जब तक कि पीछे की तरफ सफेद जगह न हो या अगली लाइन 'ए' से शुरू न हो।

तो कुछ मामलों में एक से अधिक स्थान या कोई स्थान नहीं डाला जाता है। जहाँ तक मैं देख सकता हूँ, इस व्यवहार को बदलने का कोई आसान तरीका नहीं है; मैंने gJरिक्त स्थान के बिना हमेशा शामिल होने के लिए संशोधित करने के लिए एक फ़ंक्शन बनाया :

" Like gJ, but always remove spaces
fun! JoinSpaceless()
    execute 'normal gJ'

    " Character under cursor is whitespace?
    if matchstr(getline('.'), '\%' . col('.') . 'c.') =~ '\s'
        " When remove it!
        execute 'normal dw'
    endif
endfun

" Map it to a key
nnoremap <Leader>J :call JoinSpaceless()<CR>

यह भी देखें: :help J,:help 'joinspaces'


क्या इस फ़ंक्शन का उपयोग करते समय कर्सर की स्थिति को बनाए रखने के लिए कुछ "संरक्षित" फ़ंक्शन का उपयोग करना संभव है या मुझे यह परिणाम कैसे मिलेगा?
सर्जियोआराज़ो

8

एक और ट्रिक जो आप आजमा सकते हैं, वह है रिप्लेस का उपयोग करना। कभी-कभी यह उपयोगी हो सकता है।

%s/$\n//g

परिदृश्य: अंतिम वर्ण हटाएं और अगली पंक्ति में शामिल हों:

%s/=$\n\(.\)/\1/g

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

xxxx=
123

हो जाता है:

xxxx123

3

एक मैक्रो बनाएँ और उसका पुनः उपयोग करें:

qaJxq

अब मैक्रो को फिर से चलाएँ, जहाँ भी आप दो लाइनों को बिना किसी स्थान के साथ जोड़ना चाहते हैं , aका उपयोग करके @a

@@पिछले मैक्रो को दोहराएंगे। तो आप @कई लाइनों में शामिल होने के लिए बस पकड़ सकते हैं।


1
@aजब आप टाइप कर सकते हैं तो टाइप क्यों करें Jx? कुंजी प्रेस और SHIFT प्रेस की समान संख्या!
शहबाज

2
@ शहबाज शायद अंतिम पंक्ति के कारण: "आप बस पकड़ सकते हैं @"
मूरू

1
@ मरमू, यह सच है!
शहबाज

4
यह इसे एक दोहराए जाने योग्य आदेश भी बनाता है, इसलिए आप 3@a3 लाइनों में शामिल होने के लिए उपयोग कर सकते हैं , जबकि ऐसा करने 3Jxसे रिक्त स्थान के साथ 3 पंक्तियाँ शामिल हो जाएंगी और फिर दूसरी और तीसरी पंक्तियों के बीच के स्थान को हटा दें, जिससे अन्य पंक्तियों के बीच रिक्त स्थान छोड़ दें।
18

1

हमेशा एक ही स्थान से जुड़ने के लिए:

nmap J gJi <ESC>ciW <ESC>

बिना किसी स्थान के साथ जुड़ने के लिए (ट्रेलिंग + अग्रणी स्थान को हटाता है):

nmap <C-J> gJi <ESC>diW

1
इस साइट पर आपका स्वागत है! आपकी मैपिंग मेरे लिए थोड़ा अधिक इंजीनियर लगती है, यह उपयोगी होगा यदि आप कैसे काम करते हैं इसके बारे में थोड़ा और स्पष्टीकरण जोड़ सकते हैं।
statox

1

उन लाइनों का चयन करें जिन्हें आप मर्ज करना चाहते हैं, सामान्य मोड में एक कोलन टाइप करके एक पूर्व कमांड दर्ज :करें। फिर यह कमांड टाइप करें:

s/$\n\s*//gc

पूरे कमांड को इसी तरह देखना चाहिए:

:'<,'>s/$\n\s*//gc

यह वास्तव में @ इनसपावर की कमांड का एक ट्वीक संस्करण है जो स्पेस-इंडेंटेशन के साथ-साथ न्यूलाइन वर्णों को भी बदलता है।

स्पष्टीकरण:

  • '<,'> इसका मतलब है कि हम केवल दृश्य मोड में चयनित लाइनों को संशोधित करते हैं।

  • /$\n\s*एक है regex पैटर्न। हम एक ऐसे मैच की तलाश में हैं जो $एक नई पंक्ति के चरित्र के साथ समाप्त हो \nऔर *उसके बाद गैर-निर्धारित संख्या में व्हाट्सएप हो।

  • s/pattern//gcप्रत्येक पैटर्न को खोजने और पुष्टि पर एक खाली चरित्र के साथ प्रतिस्थापित करने के लिए एक स्थानापन्न कमांड है ।

विम में नियमित अभिव्यक्ति के लिए झंडे और मेटाचैकर्स के बारे में अधिक जानने के लिए , विम संदर्भ के इस अध्याय पर एक नज़र डालें


2
हाय ubique, Vi और Vim में आपका स्वागत है ! आपको वहां बहुत अच्छा लिखित उत्तर मिला है; उसके लिए यश। मेरा एक नाइटपिक है कि रेगुलर एक्सप्रेशन = / = पायथन रेग्युलर एक्सप्रेशंस और कभी-कभी यूजर्स के लिए भ्रमित करने वाला है। शायद इसके बदले विम रेगेक्स के लिए मदद दस्तावेज़ से लिंक करें?
डी। बेन नोबल

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