पंक्ति संख्या विशिष्ट पाठ-चौड़ाई सेटिंग


9

मैं ईमेल लिखने के लिए gvim का उपयोग करता हूं और tw=72लंबी लाइनों को तोड़ने के लिए उपयोग करता हूं । अब मैं उसी डाक्यूमेंट में बेसिक मेल हेडर भी एडिट करता हूं, जैसे मैं अपने मेल में प्राप्तकर्ता जोड़ रहा हूं। अब इसके साथ tw=72ही 72 पात्रों के बाद हर बार टूट जाता है।

मैं tw=0पहली 4 पंक्तियों (यह शीर्ष लेख का हिस्सा), और tw=72बाकी दस्तावेज़ के लिए कैसे सेट कर सकता हूँ ?

यदि यह प्रासंगिक है, तो मेरे प्रारूप स्वरूप इस तरह दिखते हैं:

set fo+=tcqn

textwidthपूरे बफर पर लागू होता है।
romainl

3
यह भी देखें: विम रोकें markdown में मध्य टैग लिंक को तोड़ने से । आप ईमेल के लिए, या तो पता चल सके कि द्वारा एक ऐसी ही समाधान इस्तेमाल कर सकते हैं line('.') < 5, या अगर एक ईमेल हेडर के साथ लाइन शुरू होता है (उदाहरण के लिए जाँच करके From: , To: , आदि)।
मार्टिन टूरनोइज

@Carpetsmoker बहुत बहुत धन्यवाद, यह समाधान की कुंजी थी। मैंने आवश्यक संशोधनों के साथ अपना पूरा उत्तर जोड़ा।
mxmehl

जवाबों:


6

मेरे सवाल पर @ Carpetsmoker की टिप्पणी के लिए धन्यवाद, मैं इसे ठीक वैसे ही हल करने में सक्षम था जैसे मैं चाहता था।

.Vimrc (या किसी विशेष फ़ाइल में यह केवल मेरे ईमेल को संपादित करते समय लोड किया गया है) में निम्नलिखित फ़ंक्शन के साथ, यदि लाइन संख्या 5 से छोटी है, तो 500 को सेट किया जाता है, अन्यथा यह 72 है। इसके साथ au CursorMovedIही हर बार जाँच की जाती है कर्सर चलता है।

" Set tw to 500 if in the first 4 lines, else 500
au CursorMovedI * call ModifyTextWidth()   " execute when cursor has moved, use for all files
function! ModifyTextWidth()
    if line('.') < 5               " if line number smaller than 5
        setlocal textwidth=500     " use high tw setting
    else
        setlocal textwidth=72      " Otherwise use normal textwidth
    endif
endfunction

यदि कोई इसे लागू करने की योजना बना रहा है, तो वाइल्डकार्ड au CursorMovedI *को एक निश्चित पथ या फ़ाइल प्रत्यय के साथ बदलने पर विचार करें ।


4

Mxmehl के उत्तर के लिए एक अधिक मजबूत विकल्प।

यदि आप filetype=mailVim का उपयोग करते हैं तो आपके लिए हेडर हाइलाइट करेंगे:

यहाँ छवि विवरण दर्ज करें

हम यह निर्धारित करने के लिए वाक्यविन्यास जानकारी का उपयोग कर सकते हैं कि क्या एक पंक्ति हैडर है, और तदनुसार पाठ्यपुस्तक सेट करें।

हेडर की वाक्य रचना नाम हैं mailHeaderKey, mailSubject, mailHeaderEmail, और mailHeader। मुझे यह देखकर पता चला /usr/share/vim/vim74/syntax/mail.vim

इस समाधान को पसंद करने का कारण यह है कि यह मनमाने ढंग से लाइन नंबरों पर निर्भर नहीं करता है, लेकिन यह एक हेडर और बीस हेडर के साथ ईमेल के लिए समान रूप से सही काम करता है।

augroup filetypes
    autocmd!

    autocmd FileType mail call s:mail()
augroup end

" Set up ft=mail
fun! s:mail()
    augroup ft_mail
        autocmd!
        autocmd CursorMoved,CursorMovedI *
            \  if index(["mailHeaderKey", "mailSubject", "mailHeaderEmail", "mailHeader"], synIDattr(synID(line('.'), col('.'), 1), 'name')) >= 0
            \|     setlocal textwidth=500
            \| else
            \|     setlocal textwidth=72
            \| endif
    augroup end
endfun

2

आप इसे ऑटोकैम का उपयोग करके प्राप्त कर सकते हैं। आप उन्हें अपने vimrc में शामिल कर सकते हैं, लेकिन आमतौर पर उन्हें एक फ़िलाटाइप में शामिल करना बेहतर होता है, जैसा कि यहां बताया गया है

तब आप निम्नलिखित का उपयोग कर सकते हैं:

augroup headerTw
   au!
   autocmd InsertEnter <buffer>
            \ if line('.') < 5 |
            \    setl tw=0 |
            \ endif
   autocmd InsertLeave <buffer>
            \ if line('.') < 5 |
            \    setl tw=72 |
            \ endif
augroup END

यदि आप इसे फ़िलाटाइप प्लगइन के बिना उपयोग करना पसंद करते हैं, तो आपको <buffer>फ़ाइल पैटर्न के साथ बदलने की आवश्यकता होगी ।

विचार यह है कि 'textwidth'जब आप इंसर्ट मोड डालते हैं, तो उसे बदल दें और जब आप इसे छोड़ दें, तब इसे पुनर्स्थापित करें।

यदि आप सम्मिलित मोड में आमतौर पर पाठ में नेविगेट करते हैं (उदाहरण के लिए: तीर कुंजियों का उपयोग करके) तो आप इसे @Carpetsmoke द्वारा उल्लिखित लिंक के आधार पर बढ़ा सकते हैं: विम को मार्कडाउन में लिंक मिड-टैग को तोड़ने से रोकें।


0

मुझे विश्वास नहीं होता कि यह संभव है। हालाँकि, कुछ वर्कअराउंड हैं।

  1. आप अपना हेडर और फिर लिख सकते हैं :set tw=72। चूँकि twआपके बफ़र में पहले से मौजूद टेक्स्ट पर पूर्वव्यापी रूप से लागू नहीं किया गया है,

  2. आप पूरी बात टाइप कर सकते हैं :set tw=0और फिर एक बार जब आप काम पूरा कर लेते हैं, तो पंक्ति 4 :set tw=72और, पर जाएँ gqG। या, यदि आपको ऐसा मैन्युअल रूप से करने का मन नहीं है, तो आप इसे मैक्रो या मैप कर सकते हैं। उदाहरण के लिए, ये दोनों काम करेंगे:

    let @r=":set tw=72<cr>4GgqG:set tw=0<cr>"
    nnoremap <silent> <leader>r :set tw=72<cr>4GgqG:set tw=0<cr>
    

    ("सुधार" के लिए "आर")

    आप इसे अपने आप तब भी सेट कर सकते हैं जब आप विम को बंद कर देते हैं, यह मानते हुए कि आप चाहते हैं कि जब आप विम को बंद करें, और आप ईमेल के लिए उपयोग करते हैं, तो यह एक फ़िलाटाइप है। उदाहरण के लिए, यदि आपके सभी ईमेल में .emailएक्सटेंशन था, तो आप कर सकते हैं:

    autocommand VimLeavePre *.email set tw=72 | exe "normal! 4GgqG" | w
    

    बेशक, आपको *.emailउस फ़ाइल एक्सटेंशन को बदलना होगा जो आप वास्तव में उपयोग करते हैं। यदि आप कुछ ऐसा उपयोग करते हैं .txt, तो मैं इसकी अनुशंसा नहीं करूंगा , क्योंकि यह आपके पास मौजूद हर .txt फ़ाइल के साथ गड़बड़ करेगा ।

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