ভিআইএম-এ মার্কডাউন লেখার সময় স্বয়ংক্রিয়ভাবে লাইনগুলি পুনরায় মুছুন


11

খুব প্রায়ই, আমি ভিআইএম এ মার্কডাউন লিখি, এবং সেই চিহ্নডাউনগুলিতে অনুচ্ছেদ থাকবে। আমার সম্পাদনায় সহায়তা করার জন্য, আমি আমার চরকে 80 টি চরকে একটি লাইন মোড়ানোর জন্য সেটআপ করি। আমি ঠিক টাইপ করতে থাকি এটি দুর্দান্ত কাজ করে তবে সমস্যাটি যদি আমার কিছু সংশোধন করার দরকার হয় তবে এটি খুব বিরক্তিকর হয়ে ওঠে।

ডেমো (উইকিপিডিয়া প্রথম অর্ডার যুক্তি থেকে নেওয়া):

The adjective "first-order" distinguishes first-order logic from higher-order logic 
in which there are predicates having predicates or functions as arguments. In first-order 
theories, predicates are often associated with sets. In interpreted higher-order 
theories, predicates may be interpreted as sets of sets.

এ পর্যন্ত সব ঠিকই. তবে আমি যখন নিবন্ধটি সংশোধন করব তখন আমি মাঝখানে কিছু যুক্ত করার সিদ্ধান্ত নিতে পারি, বলুন:

The adjective "first-order" distinguishes first-order logic from higher-order logic 
in which there are predicates having predicates or functions as arguments,
or in which one or both of predicate quantifiers or function quantifiers are permitted.
In first-order theories, predicates are often associated with sets. In interpreted higher-order
theories, predicates may be interpreted as sets of sets.

নোটিশ লাইন 3 হ'ল আমি মোড়তে চাই। আমি যদি এটি ভিআইএম-এ করি তবে আমাকে নিজে লাইনগুলিতে যোগ দিতে হবে এবং পুরো অনুচ্ছেদটি আবার মুছতে হবে।

ভিআইএমকে কীভাবে এটি স্বয়ংক্রিয়ভাবে করা যায় তা যে কেউ ধারণা পেয়েছেন?

উত্তর:


7

এমনকি সহজ: যখনই পাঠ্য সন্নিবেশ করা বা মোছা হয় তখন প্যারাগ্রাফগুলির স্বয়ংক্রিয় বিন্যাস সক্ষম করার aজন্য পতাকাটি 'formatoptions'। পতাকা এবং সম্পর্কে :help fo-tableবিশদ জন্য দেখুন ।'formatoptions':help autoformat

:set formatoptions+=a

gqএবং gwনিম্নলিখিত গতিতে যে লাইনগুলি সরানো হবে সেগুলি ফর্ম্যাট করবে।

Formatting is done with one of three methods:
                1. If 'formatexpr' is not empty the expression is
                   evaluated.  This can differ for each buffer.
                2. If 'formatprg' is not empty an external program
                   is used.
                3. Otherwise formatting is done internally.

                In the third case the 'textwidth' option controls the
                length of each formatted line

উভয়ের মধ্যে পার্থক্য হ'ল gqএটি কার্সারটিকে সর্বশেষ বিন্যাসিত লাইনের প্রথম নন-ফাঁকাতে ছেড়ে দেবে। gwকার্সারটি যেখানে শুরু হয়েছিল সেখানে ফিরিয়ে দেবে।

আপনার কার্সারটি বর্তমানে রয়েছে সেই অনুচ্ছেদটি সহ আপনি পুরোপুরি সহজেই পুনরায় মুছে ফেলতে পারেন gwapবা পুরো ডকুমেন্টটি সহ gggwG, যদিও এটি আপনার কার্সারটিকে অগ্রণী করার জন্য ধন্যবাদ সরিয়ে দেবে gg

একটি স্বতঃসম্পূর্ণতার সাথে আপনার ফর্ম্যাটটি স্বয়ংক্রিয়ভাবে ঘটতে পারে। সন্নিবেশ মোড ছেড়ে যাওয়ার সময় বর্তমান অনুচ্ছেদে ফর্ম্যাট করে এমন একটি উদাহরণ এখানে দেওয়া হয়েছে:

augroup myformatting
    autocmd!
    autocmd InsertLeave * normal gwap<CR>
augroup END

অন্যান্য অটোকমন্ড ট্রিগার রয়েছে যা আপনার জন্য আরও ভাল কাজ খুঁজে পেতে পারে। আপনি বিকল্পগুলি অন্বেষণ করতে পারেন :help autocmd-events। সর্বাধিক প্রাসঙ্গিকগুলি সম্ভবত "বিভিন্ন" সাবহেডিংয়ের অধীনে রয়েছে।


এক শব্দ: উজ্জ্বল!
জেসন হু

1

আমি একবার তাকান হবে :help 'textwidth'। আপনি টাইপ করার সাথে সাথে এটি স্বয়ংক্রিয়ভাবে লাইনগুলি ভেঙে ফেলবে। তবে আপনি কোনও লাইনের মাঝখানে সম্পাদনা করলে এটি কাজ করে না।

আমি ব্যক্তিগতভাবে ছেড়ে যেতে পছন্দ textwidthকরি তাই আমি এমন একটি ফাংশন তৈরি করেছি যা স্বয়ংক্রিয়ভাবে যোগদান করবে এবং অনুচ্ছেদে বিভক্ত হবে। (মূলত এটিটিকে 80 টি অক্ষরে স্বরূপকরণ করা হয়) এটি দেখতে এটির মতো দেখাচ্ছে:

function! ParagraphToEightyChars()
   while (len(getline(".")) > 80)
      normal! 0
      " Find the first white-space character before the 81st character.
      call search('\(\%81v.*\)\@<!\s\(.*\s.\{-}\%81v\)\@!', 'c', line('.'))
      " Replace it with a new line.
      exe "normal! r\<CR>"
      " If the next line has words, join it to avoid weird paragraph breaks.
      if (getline(line('.')+1) =~ '\w')
         normal! J
      endif
   endwhile
   " Trim any accidental trailing whitespace
   :s/\s\+$//e
endfunction

আমার যখনই এটি প্রয়োজন হবে তখনই কল করার জন্য আমার একটি ম্যাপিং রয়েছে:

nnoremap <silent><A-J> :call ParagraphToEightyChars()<CR>

এই ফাংশনটি formatoptions+=jrকোডেও মন্তব্য ফর্ম্যাট করার জন্য দুর্দান্ত কাজ করে! আপনার কার্সারটিকে প্রথম লাইনে 80 টি অক্ষরের বেশি দীর্ঘ করুন এবং ফাংশনটি কল করুন।

(দ্রষ্টব্য: আমি 80 এর চেয়ে অন্য দৈর্ঘ্যগুলি করার জন্য এই ফাংশনটিকে সাধারণ হিসাবে তৈরি করি নি, তবে আমি মনে করি আপনি যদি অন্য কিছু করতে চান তবে আপনার কেবল 80 এবং 81 এর পরিবর্তন করা দরকার)

আরও তথ্যের জন্য দেখুন :help 'textwidth'এবং :help 'formatoptions'


আপনার ভাগ করে নেওয়ার জন্য ধন্যবাদ। আমি আপনার সেটআপটি যাচাই করে দেখছি, এটি টাইপ করার সাথে সাথে স্বয়ংক্রিয়ভাবে ফর্ম্যাটিং হয় না, তাই না? যদি তাই হয়, তবে এটি এখনও একটি suboptimal সমাধান, না?
জেসন হু

textwidthআপনি টাইপ করার সাথে সাথে স্বয়ংক্রিয়ভাবে ফর্ম্যাট হবে। আমার ফাংশন হবে না। আমি যখন ভিএম জিনিসগুলি মোড়কে রাখি তখন নিয়ন্ত্রণ করতে পছন্দ করি, তাই এটি আমার পক্ষে কাজ করে। তবে আপনি যদি নির্দিষ্টভাবে একটি টাইপ করা ফর্ম্যাটরটি সন্ধান করেন তবে হ্যাঁ; এটি আপনার কর্মপ্রবাহে পুরোপুরি ফিট করে না।
19:19 এ টাম্বল 41

1

সম্পূর্ণতার জন্য, আমি প্লাগ-ভিত্তিক বিকল্পটি উল্লেখ করতে চাই।

আপনি ভালো কিছু ব্যবহার করেন তাহলে বীয়ার যা সংরক্ষণ একটি Beautifier মাধ্যমে আপনার বাফার চলমান সমর্থন করে, আপনাকে ভেতরে যেতে পারে prettier হ্যান্ডেল আপনার কোড rewrapping।

আমি এটি রেখে এটি সম্পাদন করেছি ~/.vim/ftplugin/markdown.vim:

let b:ale_fixers = ['prettier', 'remove_trailing_lines', 'trim_whitespace']
let b:ale_javascript_prettier_options = '--prose-wrap always'

... এবং এটি লাগাতে ~/.vimrc:

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