2009-08-22 12 views
10

मैं एक या अधिक पंक्तियों के अंत में एक वर्ण को बार-बार कैसे जोड़ सकता हूं, रेखा को एक विशिष्ट कॉलम में पैडिंग कर सकता हूं?विम: एक चरित्र के साथ लाइनों को पैडिंग

उदाहरण के लिए:
('एक्स' स्तंभ 40, नहीं लाइन पर एक चरित्र का प्रतिनिधित्व करता है, और पाठ के बाद कोई रिक्त स्थान या टैब देखते हैं)

line one        x 
line two        x 
line three        x 
line eleventy-billion     x 

line one ------------------------------x 
line two ------------------------------x 
line three ----------------------------x 
line eleventy-billion -----------------x 

उत्तर

18

हो जाता है \= का संयोजन, submatch(), और repeat():

:%s/\v^.*$/\= submatch(0) . " " . repeat("-", 39 - len(submatch(0))) 
+0

+1 मैंने उस चीज़ को पढ़ा और सोचा कि 'काम नहीं करेगा' लेकिन निश्चित रूप से पर्याप्त ... – bmb

+0

O_o। वास्तव में तीन कीस्ट्रोक समाधान की उम्मीद नहीं थी;) मैं ज्यादातर जो कर रहा हूं वह आपको मिलता है, लेकिन शुरुआत में \ v क्या करता है? इसके अलावा, उस प्रतिस्थापन को क्यों चल रहा है सिंटैक्स रंग nuke? –

+3

\ v रेगेक्स की शुरुआत में सभी विराम चिह्न विशेष बनाता है; मैं आदत से बाहर करता हूं इसलिए मुझे याद रखना नहीं है कि क्या विशेष है और क्या नहीं है। यह वाक्यविन्यास को हाइलाइट नहीं करना चाहिए, जब तक कि अतिरिक्त डैश अमान्य वाक्यविन्यास न हों? स्क्रीन को फिर से निकालने के लिए ctrl-L आज़माएं। – Eevee

2

बस अगर कोई भविष्य में इस पर फंसे हुए हैं, तो मेरे पास एक वैकल्पिक तरीका है कि मैं का उपयोग करता हूं जो (मुझे लगता है) दुर्लभ अवसर पर याद रखना आसान है कि किसी को मैन्युअल रूप से कुछ लाइनों को पैड करने की आवश्यकता होगी।

इनपुट पाठ:

Here are some words 
They do not have equal length 
I want to insert characters after them until column 40 
How to do? 

आप क्या टाइप करें:

gg    // Position cursor anywhere on first line you want to pad 
q1$40A-<Esc>d40|q // Looks more complex than it is. 
        // Here, in English: 
        // 1. Record a macro in slot 1 
        // 2. Go to the end of the line, then *A*ppend a '-' 40 times 
        // 3. Delete from cursor position (which is still at the end of the line) to column 40 
        // 4. Stop recording 
:1,4normal @1  // Repeat macro "1" for every line 

आउटपुट पाठ:

Here are some words----------------- 
They do not have equal length------- 
I want to insert characters after t- 
How to do?-------------------------- 

उम्मीद है कि आप पता लगा सकते हैं कि कैसे करने के लिए आदेश के विभिन्न भागों को समायोजित करने के इसे वही करें जो आप चाहते हैं। नोट टेक्स्ट जो आपकी वांछित कॉलम अवधि से अधिक लंबा है, को छोटा कर दिया जाएगा (लाइन 3 पर प्रदर्शित)।

संबंधित मुद्दे