पाठ को 80 कॉलमों के पुनर्गठन / बल देने की आज्ञा दें


240

मुझे पता है कि विम का उपयोग करके पाठ की चौड़ाई को स्वचालित रूप से सेट करने के तरीके हैं set textwidth(जैसे विम 80 कॉलम लेआउट चिंताओं )। मैं जिस चीज की तलाश कर रहा हूं, वह =(इंडेंट लाइन कमांड) के समान है , लेकिन 80 तक लपेटने के लिए। उपयोग का मामला कभी-कभी आप टेक्स्टवर्क के साथ टेक्स्ट को संपादित करते हैं और लाइनों से जुड़ने या टेक्स्ट को हटाने या जोड़ने के बाद यह खराब लिपटे से बाहर आता है।

आदर्श रूप में, यह कमांड मेरे द्वारा चुनी गई लाइनों को पूरी तरह से पुनर्गठित करेगा और शॉर्ट्स को जोड़ते हुए लंबी लाइनों को काट देगा। एक उदाहरण:

long line is long!  
short

कमांड चलाने के बाद (मान लीजिए कि लपेट 13 कोलों की थी):

long line is  
long! short

यदि यह एक सच्चे विम कमांड के साथ संभव नहीं है, तो शायद एक कमांड-लाइन प्रोग्राम है जो ऐसा करता है कि मैं इनपुट को पाइप कर सकता हूं?

खोज के बाद मुझे यह संदर्भ मिला जिसमें कुछ और विकल्प हैं: http://www.cs.swarthmore.edu/help/vim/reforming.html


9
आपको यह जानने में भी रुचि हो सकती है कि विम पाठ प्रारूपण को बाहरी प्रोग्राम, जैसे कि समतुल्य कर सकता है । मैंने एक पेंचकस बनाया जो दर्शाता है कि कैसे पाठ को बराबर के साथ स्वरूपित करना है
नेलस्ट्रॉम

@ लाइनस्ट्रॉम धन्यवाद, टीआईएल के बारे में par। यह बढ़िया है!
स्टीवन लू

2
जब आप चाहते हैं कि टेक्स्ट स्लिम एंड ट्रिम (अच्छी तरह से कटा हुआ) दिखे , तो हमेशा सोचें gq- जेंटलमैन क्वार्टरली । (एंथ्रोपोमोर्फिफ़िंग नर के लिए क्षमा याचना, लेकिन मेमनोनिक काम करता है।)
रफिन

जवाबों:


372

textwidth80 पर सेट करें ( :set textwidth=80), फ़ाइल की शुरुआत में जाएं ( Ctrl- Homeया gg) के साथ किया जा सकता है , और टाइप करें gqG

gqGवर्तमान स्थिति से और फ़ाइल के अंत तक पाठ को प्रारूपित करता है। यह स्वचालित रूप से संभव होने पर लगातार लाइनों में शामिल हो जाएगा। यदि आप नहीं चाहते कि आप उन दो रेखाओं के बीच एक रिक्त रेखा रख सकें, तो आप उन दोनों को एक साथ जोड़ सकते हैं।


14
और यह दृश्य चयन के साथ भी काम करता है। की तरह यानी कुछ: V}gq। इस तरह से आप देखते हैं कि वास्तव में प्रारूपित करने से पहले आप क्या प्रारूप करने जा रहे हैं।
प्लॉफ

6
वैसे, वास्तव में क्या करता qहै?
रिचर्ड-डिगेंन

1
वहाँ लाइनों के साथ ऐसा करने का एक तरीका है जो केवल एक लंबे अक्षरों का एक स्ट्रिंग है, जिसमें कोई स्थान नहीं है? संपादित करें: मैंने "तह" उपयोगिता की खोज की है। अभी भी vi में ऐसा करने के बारे में सोच रहा था।
डोनाल्ड स्मिथ

7
समय बचाने के set tw=80बजाय उपयोग करेंset textwidth=80
Yibo Yang

4
set textwidth=76टाइप करते समय @dmranck आपकी लाइनों के बाद स्वतः लोड हो जाएगा। मेरी शिकायत यह है कि यह मौजूदा लाइनों के संपादन के लिए कुछ भी नहीं करता है। लेकिन V}gqउस संबंध में अत्यंत उपयोगी है। Vदृश्य चयन मोड में प्रवेश }करता है, अगले पैराग्राफ ब्रेक के लिए चयन करता है, और gqउस पर वर्तमान फॉर्मैटर को निष्पादित करता है (या gwस्पष्ट रूप से vi फॉर्मैटर को कॉल करने के लिए उपयोग करता है)। इसके अलावा, {ऊपर की ओर का चयन करेंगे। आप पूरे दस्तावेज़ और प्रारूप का चयन कर सकते हैं, ggVGgqहालाँकि शायद इसका एक आसान तरीका है। @इसे आसान बनाने के लिए मैक्रो के रूप में सहेजें । vipgqवर्तमान अनुच्छेद fmt का उपयोग करें ।
ktbiz

94

माइकल के समाधान की कुंजी है, लेकिन मैं सबसे अधिक बार पाता हूं कि मैं वर्तमान पैराग्राफ के बाकी हिस्सों में सुधार करना चाहता हूं; इस व्यवहार के लिए, का उपयोग करें gq}


17
इस पर विस्तार - आप जो चाहें, उसे स्वरूपित करने के लिए gq <गति> का उपयोग कर सकते हैं।
डैन श्नाउ

1
इसके अलावा, 'nojoinspaces' विकल्प जो दो स्थानों को अवधि के बाद दिखाई देने से रोकता है जब लाइनों को एक वाक्य सीमा में शामिल किया जाता है। अच्छा है जब अंग्रेजी में वाक्यों के बीच आपकी टाइपोग्राफिक शैली एकल रिक्त स्थान है।
एलेक्स हिरजेल 16

36

आप gqकिसी भी आंदोलन संचालक के साथ उपयोग कर सकते हैं । उदाहरण के लिए, यदि आप केवल वर्तमान लाइन के अंत में सुधार करना चाहते हैं (यानी उस लाइन को लपेटने के लिए जो आपका कर्सर चालू है) तो आप उपयोग कर सकते हैंgq$

आप दृश्य मोड में पाठ का चयन करके सुधार भी कर सकते हैं (`v और चलती का उपयोग करके) और फिर टाइपिंग gq।

लाइनों को लपेटने के लिए मजबूर करने के लिए अन्य विकल्प भी हैं।

यदि आप अपनी पंक्तियों को लपेटना चाहते हैं, जबकि आप पाठ को पुन: व्यवस्थित करने के लिए अंत तक प्रतीक्षा करने के बजाय उनमें पाठ सम्मिलित कर रहे हैं, तो आप इन विकल्पों को उपयोगी पाएंगे:

:set textwidth=80
:set wrapmargin=2

(पक्ष-ट्रैक से मिलता है नहीं wrapऔर linebreakहै, जो केवल पुनः स्वरूपित पाठ स्क्रीन पर प्रदर्शित किया है, और बफर में पाठ बदलने नहीं है)


9
से wrapmarginमदद: जब 'textwidth' है गैर शून्य इस विकल्प का प्रयोग नहीं किया जाता।
mmoya डिक

21

डोनाल्डस्मिथ की एक टिप्पणी के लिए धन्यवाद, मुझे यह मिला, क्योंकि textwidthविकल्प ने पाठ की मेरी लंबी रेखा को नहीं सुधारा (मैं हेक्स-टू-बाइट रूपांतरणों के साथ खेल रहा था):

:%!fold -w 60

इसने पूरी फाइल (जो कि मेरे लिए एक लाइन थी) को लंबाई 60 की लाइनों में सुधार दिया।


1
यह बहुत अच्छा है। सभी उत्तर एक पंक्ति की चौड़ाई को सीमित करने पर ध्यान केंद्रित करते हैं जब एक रेखा शब्दों में रिक्त स्थान को विभाजित करती है। यह समाधान बहुत लंबे शब्दों (डीएनए अनुक्रम) के लिए काम करता है।
पेड्रोसोरियो

1
लंबे यूआरएल के लिए यह केवल एक चीज के बारे में है जो मैंने पाया है कि काम करता है। मैं पहले से ही टेक्स्टवर्क के बारे में नया हूँ लेकिन यह अटूट तार नहीं तोड़ पाएगा (जो आमतौर पर एक अच्छी बात है)
SkyLeach

13

यदि आप एक गैर-विम तरीके की तलाश कर रहे हैं , तो हमेशा UNIX कमांड fmt और par होता है

टिप्पणियाँ:

  • मैं यूनिकोड पर टिप्पणी नहीं कर सकता, यह अलग तरह से व्यवहार कर भी सकता है और नहीं भी।
  • @nelstrom ने पहले ही parअपने वेबकास्ट में उपयोग करने का उल्लेख किया है ।

यहां बताया गया है कि हम आपके उदाहरण के लिए दोनों का उपयोग कैसे करेंगे।

$ echo -e 'long line is long!\nshort' > 3033423.txt
$ cat 3033423.txt
long line is long!
short
$ fmt -w 13 3033423.txt
long line is
long!  short
$ par 13gr 3033423.txt
long line is
long! short

विम के अंदर से उपयोग करने के लिए:

:%! fmt -w 13
:%! par 13gr

आप :formatprgबराबर या fmt और ओवरराइड पर भी सेट कर सकते हैं gq। अधिक जानकारी के लिए, :help formatprgविम के अंदर कॉल करें ।


9

लगभग हमेशा मैं gqदृश्य मोड में उपयोग करता हूं । मैं अपने छात्रों को बताता हूं कि यह "जेंटलमैंस क्वार्टरली" के लिए है, जो तेज लोगों के लिए एक पत्रिका है।

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