मनमानी चौड़ाई की खिड़की में विम में 80 अक्षरों पर नरम लपेट


126

मैं अपनी वास्तविक खिड़की की चौड़ाई की परवाह किए बिना 80 अक्षरों में कुछ कोड लपेटने के लिए विम की सॉफ्ट रैप कैपेसिटी ( :set wrap) का उपयोग करना चाहता हूं ।

मुझे अभी तक ऐसा करने का कोई तरीका नहीं मिला है - सभी नरम आवरण खिड़की की चौड़ाई से बंधे हुए लगते हैं

  • textwidthऔर wrapmarginदोनों हार्ड रैपिंग के लिए हैं (वे फ़ाइल में नए अक्षरों को सम्मिलित करते हैं)
  • कई खिड़कियों में ऊर्ध्वाधर विभाजन और :vertical resize 80( :set breakat=किसी भी चरित्र पर टूटने की अनुमति देने के लिए संभवतः ) उनमें से एक प्रकार के कार्यों पर (भले ही यह थोड़ा हैकिश है), लेकिन जब :set numberपंक्ति संख्याएं स्तंभों की संख्या के आधार पर उपयोग करती हैं (निर्भर करता है) फ़ाइल की लंबाई पर) और ये 80 का हिस्सा हैं।

क्या ऐसा करने का कोई तरीका है? यह अन्य स्रोतों के अनुसार, आशाजनक नहीं लगता है

अभी मेरा सन्निकटन सिर्फ /^.\{80}\zs.\+मेरी डिफ़ॉल्ट खोज के रूप में है इसलिए इसे कम से कम हाइलाइट किया गया है। मैंने इसके लिए एक :syntaxआइटम जोड़ने के बारे में सोचा , लेकिन यह तब टूट गया जब इसने अन्य सिंटैक्स आइटमों को ओवरलैप किया, इसलिए मैंने उस विचार को छोड़ दिया।


दरअसल, आपने एक डिफ़ॉल्ट खोज कैसे स्थापित की?
thethinman

जवाबों:


37

आप ऐसा कर सकते हैं

  • लाइन नंबर कॉलम के माध्यम से एक बड़ी न्यूनतम चौड़ाई सेट करें :set numberwidth=6 और के
  • तब आप अपनी विंडो को :set columns=86(या माउस के साथ) उचित आकार में बदल सकते हैं।

यदि आप इसमें एक लाख लाइनों के साथ एक फ़ाइल संपादित करते हैं, तो आपको परेशानी हो सकती है, लेकिन यह संभावना नहीं है। आप स्क्रीन रियल एस्टेट के 6 कॉलम भी इस तरह बर्बाद कर रहे हैं। इसलिए अभी भी सभी तरह की समस्याएं हैं।

आप यहाँ और यहाँ:match कहे अनुसार 80 वें कॉलम का उपयोग करके पिछले को उजागर कर सकते हैं

इसके अलावा मैं ऐसा करने का कोई तरीका नहीं देख सकता। लगता है, हालांकि यह एक अच्छी सुविधा होगी।


यदि विंडो का आकार बदला जाता है तो दुर्भाग्यवश कॉलम सेटिंग नहीं रखता है। यह टाइल प्रबंधकों के साथ एक दुर्भाग्यपूर्ण स्थिति की ओर ले जाता है जहां खिड़की के बहुत चौड़े होने पर 80 कॉलमों पर नरम लपेटने का कोई अच्छा तरीका नहीं है।
गुरुत्वाकर्षण

यह काम करता है, लेकिन यह चिपचिपा नहीं है। मुझे लगता है कि अगला कदम उन इच्छित फ़ाइल के लिए स्तंभों को नए इच्छित आकार में रखने के लिए एक स्वतः पूर्ण सेटअप करना है।
xer0x

1
यह सही उत्तर है जिसमें यह पुष्टि करता है कि आप ऐसा नहीं करेंगे। और मुझे यकीन है कि मैं केवल वही नहीं हूं जो अपने टर्मिनल विंडो का आकार बदलना नहीं चाहता। मुझे गैर-विम उपयोगों के लिए बहुत अधिक चौड़ाई चाहिए।
श्रीधर सरनोबत

20

इसे इस्तेमाल करे:

set columns=80
autocmd VimResized * if (&columns > 80) | set columns=80 | endif
set wrap
set linebreak
set showbreak=+++

if (&columns > 80) |यदि आप हमेशा 80 कॉलम चाहते हैं तो आप निकाल सकते हैं।


मेरे iTerm टर्मिनल पर, यह विंडो को छोटा बनाता है। मुझे यकीन नहीं है कि अगर यह मेरे पर्यावरण के साथ एक मुद्दा है (मुझे लगता है कि आप स्वचालित आकार बदलने के साथ कुछ कर रहे हैं), लेकिन अन्यथा यह वांछनीय नहीं है। फिर भी सुझाव के लिए धन्यवाद।
श्रीधर सरनोबत

ऑटोकैम ने मेरे लिए पूरी तरह से काम किया (गाइक टर्मिनल का उपयोग करके)।
mzcarlos

अल्म्राति में Tmux + NeoVim के साथ आकर्षण की तरह काम करता है।
meh

16

मेरे पास सॉफ्ट रैप का कोई हल नहीं है, लेकिन एक कॉलम को चिह्नित करने के लिए, जैसा कि विम 7.3 (रिलीज़ 2010-08-15) :set colorcolumn=80कॉलम 80 को उजागर करेगा। रंग आपकी सिंटैक्स फ़ाइल पर निर्भर करेगा।

देखें विम 80 स्तंभ चिंताओं लेआउट , :h colorcolumn


उद्धरण मान्य URL नहीं हैं इसलिए यह समझ में आता है। एंकर के नाम में अमान्य URL वर्ण नहीं होने चाहिए, SO को अन्य साइट डेवलपर्स की त्रुटियों को ठीक नहीं करना चाहिए।
शैडो विजार्ड कान है आपके लिए

1
शैडो विजार्ड मेरे उत्तर के पिछले संशोधन का जिक्र कर रहा है, जिसमें मुझे आश्चर्य है कि मार्कडाउन का उपयोग करके URL में एकल उद्धरण कैसे रखें। तब ib ने % 27 का उपयोग करने का सुझाव दिया , जिसने काम किया। धन्यवाद, ib।
ftvs

हाल ही में पता चला कि कैसे केवल स्तंभों को उजागर करने के लिए 80 ~:let w:eighty_column_match = matchadd('ColorColumn', '\%81v.\+', 100)
रैंपियन

यह colorwidthबात अन्य कारणों से मददगार है, इसलिए मुझे खुशी है कि आपने यह पोस्ट किया है।
श्रीधर सरनोबत

2

क्या आपने कोशिश की है 'linebreak'?

        *'linebreak'* *'lbr'* *'nolinebreak'* *'nolbr'*
  'linebreak' 'lbr' boolean (default off)
        local to window
        {not in Vi}
        {not available when compiled without the  |+linebreak|
        feature}
If on Vim will wrap long lines at a character in 'breakat' rather
than at the last character that fits on the screen.  Unlike
'wrapmargin' and 'textwidth', this does not insert <EOL>s in the file,
it only affects the way the file is displayed, not its contents.  The
value of 'showbreak' is used to put in front of wrapped lines.
This option is not used when the 'wrap' option is off or 'list' is on.
Note that <Tab> characters after an <EOL> are mostly not displayed
with the right amount of white space.

3
हम्म ... लेकिन breakatसिर्फ एक पैटर्न है (लंबाई नहीं), इसलिए मैं यह नहीं देखता कि मैं इसे 80 पर नरम लपेटने के लिए कैसे उपयोग कर सकता हूं ....
15:14 पर रैंप

हम्म, मुझे आश्चर्य है कि अगर यह एक रेगीक्स बनाना संभव है जो उन शब्दों से मेल खाएगा जिनकी कुल लंबाई (बीच में प्लस व्हाट्सएप) n वर्ण से कम या बराबर है।
शेन क्रेयटन-यंग

@ शेनकेरेटन-यंग: ^.{,80}\bऐसे लोगों के लिए करेगा जो सॉफ्ट / एक्सपैंड टैब का उपयोग करते हैं। ध्यान दें कि पर्ल रेगेक्स है, रेम रेक्स नहीं।
मार्क के कोवन

0

इसे करने का कोई अच्छा तरीका नहीं है। यदि हम @eborisch उत्तर को संशोधित setlocal softwrapकरते हैं, autocmdतो हम एक अस्थायी हैक कर सकते हैं । यदि हम हर बार बफर में प्रवेश करते हैं, और स्थानीय चर के अनुसार हम एक विशेष लंबाई के आकार के होते हैंsoftwrap सेट होने पर हम , तो हमें वांछित व्यवहार मिलता है।

मान लें कि हम 80 कॉलमों में नरम लपेटना चाहते हैं, हम निम्नलिखित में लिख सकते हैं .vimrc

augroup softwrap
    autocmd VimResized * if (exists('b:softwrap') && &columns > 80) | set columns=80 | endif
    autocmd BufEnter * set columns=999
augroup END

किसी विशेष बफ़र के लिए मोड चालू करने के लिए, निम्न आदेशों का उपयोग करें:

let b:softwrap=1
set columns=80

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