লাইন নম্বর নির্দিষ্ট পাঠ্য-প্রস্থ সেটিংস


9

আমি ইমেলগুলি লেখার জন্য জিভিএম ব্যবহার করি এবং tw=72দীর্ঘ লাইনগুলি ভাঙ্গতে ব্যবহার করি । এখন আমি একই নথিতে বেসিক মেল শিরোনামগুলি সম্পাদনা করি, যেমন আমি আমার মেইলে প্রাপকদের যুক্ত করছি। এখন tw=72এটির সাথে প্রতিবার 72 টি চরিত্রের বিরতি ঘটে।

আমি tw=0প্রথম 4 টি লাইন কীভাবে সেট করতে পারি (এটি শিরোনাম অংশ) এবং tw=72বাকী নথির জন্য?

আমার ফর্ম্যাটপশনগুলি দেখতে দেখতে এটি প্রাসঙ্গিক:

set fo+=tcqn

textwidthপুরো বাফার প্রয়োগ করা হয়।
রোমেনেল

3
আরও দেখুন: মার্ক ডাউনডে মিড-ট্যাগ লিংক ভাঙতে ভিমকে আটকাবেন । আপনি ইমেল করার জন্য, হয় পরীক্ষণ যদি একটি অনুরূপ সমাধান ব্যবহার করতে পারে line('.') < 5, অথবা যদি একটি ইমেল হেডার সঙ্গে সঙ্গতিপূর্ণ শুরু (যেমন চেক করে From: , To: , ইত্যাদি)।
মার্টিন টর্নয়েজ

@ কার্পেটস্মোকার অনেক ধন্যবাদ, এটিই সমাধানের মূল বিষয়। আমি প্রয়োজনীয় পরিবর্তনগুলি সহ আমার পূর্ণ উত্তর যুক্ত করেছি।
এমএক্সএমএইএল

উত্তর:


6

আমার প্রশ্নে @ কার্পেটস্মোকারের মন্তব্যে ধন্যবাদ, আমি যেমনটি চেয়েছিলাম ঠিক ঠিক তেমনই এটি সমাধান করতে সক্ষম হয়েছি।

.Vimrc নিম্নলিখিত ফাংশন (অথবা একটি বিশেষ ফাইল এটি শুধুমাত্র লোড যখন আমার ইমেল সম্পাদনা মধ্যে আমার ক্ষেত্রে), TW 500 সেট করা হয় যদি লাইন সংখ্যা 5 চেয়ে ছোট, অন্যথায় এটি 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

এমএক্সমেহেলের উত্তরের আরও শক্তিশালী বিকল্প।

আপনি যদি filetype=mailভিম ব্যবহার করেন তবে আপনার জন্য শিরোনাম হাইলাইট করবে:

এখানে চিত্র বর্ণনা লিখুন

লাইনটি শিরোনাম কিনা তা নির্ধারণ করতে আমরা বাক্য গঠন তথ্য ব্যবহার করতে পারি এবং সেই অনুসারে পাঠ্য প্রস্থটি সেট করতে পারি।

হেডার সিনট্যাক্স নাম হয় 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 অন্তর্ভুক্ত পারে, কিন্তু এটা তাদের একটি filetype: অন্তর্ভুক্ত করতে সাধারণত ভাল, যেমন এখানে ব্যাখ্যা

তারপরে আপনি নিম্নলিখিতটি ব্যবহার করতে পারেন:

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'যখন সন্নিবেশ মোডটি প্রবেশ করবেন তখন পরিবর্তন করুন এবং আপনি যখন তা ছেড়ে যাবেন তখন এটি পুনরুদ্ধার করুন।

যদি আপনি সাধারণত সন্নিবেশ মোডে (যেমন: তীরচিহ্নগুলি ব্যবহার করে) পাঠ্যে ন্যাভিগেট করেন তবে আপনি @ কার্পেটস্মোকে উল্লিখিত লিঙ্কটির উপর ভিত্তি করে এটি বাড়িয়ে তুলতে পারেন: মার্কমডনে লিঙ্কের মিড-ট্যাগ ভাঙ্গা থেকে ভিমকে আটকাবেন


0

আমি বিশ্বাস করি না এটি সম্ভব। যাইহোক, একটি দম্পতি workaround আছে।

  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 ফাইলের সাথে বিশৃঙ্খলা করবে ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.