2010-02-10 11 views
9

मैं अक्सर रिक्तियों से अलग मूल लाइनों के साथ एक ही पंक्ति में कई चयनित लाइनों में शामिल होने का दृश्य मोड में शिफ्ट + जम्मू का उपयोग करें। लेकिन मुझे आश्चर्य है कि अगर कोई विपरीत शॉर्टकट है तो यह अलग-अलग शब्दों में अलग-अलग शब्दों (प्रति पंक्ति एक शब्द) में विभाजित होगा।विम: लाइन्स में शब्द विभाजित करें?

बेशक मैं कर सकते हैं:

:'<,'>s/ /^M/g

लेकिन कीस्ट्रोक्स के संदर्भ में अधिक संक्षिप्त कुछ बहुत उपयोगी होगा। क्या किसी और को ऐसा करने का कोई तरीका मिला है?

अग्रिम धन्यवाद,

-aj

+1

बस कुछ शॉर्टकट से मैप सकता है ... – tristan

+1

कर्सर एक अंतरिक्ष है कि आप एक नई पंक्ति के साथ बदलना चाहते हैं पर तैनात किया जाता है तो, 's^एम^['। ': कॉल सेटलाइन ('।', विभाजन (गेटलाइन ('।')))' वर्तमान लाइन को व्हाइटस्पेस द्वारा विभाजित करेगा और इसे कई लाइनों में विस्फोट कर देगा। लेकिन उनमें से कोई भी आप जो भी मांग रहे हैं वह करता है; इसके लिए, मैं अब आपके पास जो कुछ भी है उससे बेहतर कुछ भी नहीं सोच सकता, शायद एक शॉर्टकट बाध्यकारी से @ मिचेल और @ ट्रिस्टन सुझाव देता है। – ephemient

+0

संबंधित: 'r ' व्हाइटस्पेस चार के स्थान पर एक लाइनब्रेक डालने के लिए एक अंतर्निहित 2 कीस्ट्रोक तरीका है। इस तरह की अधिक परिष्कृत मैपिंग्स [Insertlessly.vim] (https://github.com/dahu/Insertlessly) में प्रतीक्षा कर रही हैं। –

उत्तर

4

मानचित्र यह यदि आप इसे अपने ~/.vimrc फ़ाइल में अक्सर प्रयोग कर रहे हैं या इसी तरह

vnoremap \ll :'<,'>s/ /^M/g<cr> 
nnoremap \ll :s/ /^M/g<cr> 

अगर आप केवल इसे करने के लिए करना चाहते हैं कर रहे हैं कई बार अब आप अंतिम खोज को दोहराने के लिए & कमांड का उपयोग कर सकते हैं

थ्रेस भी gqq लेकिन टेक्स्टविड्थ के लिए ऐसा है जैसे 80 वर्ण

+0

शायद दृश्यमान रूप से चुने गए शब्दों के लिए 'vnoremap' होना चाहिए। –

+0

आह सच मैंने <> नहीं देखा था – michael

3

हाल ही में मैंने एक ही समस्या में ठोकर खाई। के रूप में

:26call SplitToLines() 

जो लाइन संख्या 26. लेकिन कोड विभाजित हैं इस प्रकार है,

function SplitToLines() range 
    for lnum in range(a:lastline, a:firstline, -1) 
    let words = split(getline(lnum)) 
    execute lnum . "delete" 
    call append(lnum-1, words) 
    endfor 
endfunction 

इस लाइन पर्वतमाला, जैसे के साथ प्रयोग किया जा सकता है: मेरे समाधान निम्नलिखित vim समारोह (मेरी .vimrc में डाल) है लाइनों की सीमाओं को सुदृढ़ रूप से भी संभालती है (यही कारण है कि लूप में रेंज रिवर्स ऑर्डर में बनाई गई है)।

1,10call SplitToLines() 

कई लाइनों में लाइनों 1 से 10 तक विभाजित कर देगा। हालांकि, मैं ज्यादातर इसे

'<,'>call SplitToLines() 

जो दृश्यमान रूप से चिह्नित सभी पंक्तियों को विभाजित करता है। बेशक आप इस फ़ंक्शन कॉल के लिए कुछ एकल अक्षर संक्षेप को परिभाषित कर सकते हैं (ऑटो पूर्णता के साथ टैब मुझे यह आवश्यक नहीं लगता है)। यह भी ध्यान रखें कि एक अतिरिक्त तर्क जोड़कर जिसे 'विभाजन' द्वारा भी उपयोग किया जाएगा, आपके पास एक ऐसा फ़ंक्शन हो सकता है जो विशिष्ट पैटर्न (केवल सफेद स्थान की बजाय) पर विभाजित रेखाएं करता है।

1

मैं करने के लिए संयुक्त राष्ट्र के साथ जुड़ें मेरी config में इस का उपयोग/वर्तमान लाइन पर विभाजित अंतिम शब्द:

nnoremap <C-J> g_F<Space><Space>i<CR><Esc>k 

यह जुड़ें के विपरीत करने के लिए नक्शे के लिए CTRL-जे मैं के रूप में काउंटर से जुड़ें यह के बारे में सोच :) मैं ज्यादातर इसका उपयोग K & आर शैली बनाम ... अन्य प्रकार के घुंघराले ब्रेस प्लेसमेंट के बीच कनवर्ट करने के लिए करता हूं।

g_  : search for the last non-whitespace on current line 
F<Space> : reverse-find first space 
<Space> : go one character forward 
i  : enter insert mode 
<CR>  : insert a line break 
<Esc> : return to normal mode 
k  : go up one line to where we begun 
संबंधित मुद्दे