প্রতি লাইনে একটি বাক্য দিয়ে কীভাবে কাজ করতে ভিম সেট আপ করবেন?


17

আমি বর্তমানে প্রচুর প্লেইন টেক্সট লিখছি (এবং অনুচ্ছেদে ন্যূনতম ফর্ম্যাটিং সহ লটেক্স) এবং আমি প্রতিটি বাক্য রাখতে সরলতা (সরলতার জন্য, পাঠ্য '।', 'দিয়ে শেষ করতে পারলে ভাল লাগবে!', '!) , বা '?'; এটি একটি পরিসমাপ্তি বিরামচিহ্ন যার পরে একটি স্পেস থাকে যার ফলে ডেসিমাল সংখ্যায় ভাঙা এড়াতে পারে) নিজের লাইনে যাতে ভিসিএস ডিফগুলি আরও কার্যকর হয়।

ন্যূনতমভাবে, আমি gqএখান থেকে পাঠ্যটি ফর্ম্যাট করতে চাই :

He lay flat on the brown, pine-needled floor of the forest, his chin on his
folded arms, and high overhead the wind blew in the tops of the pine trees.
The mountainside sloped gently where he lay; but below it was steep and he
could see the dark of the oiled road winding through the pass. There was a
stream alongside the road and far down the pass he saw a mill beside the
stream and the falling water of the dam, white in the summer sunlight. 

প্রতি:

He lay flat on the brown, pine-needled floor of the forest, his chin on his folded arms, and high overhead the wind blew in the tops of the pine trees.
The mountainside sloped gently where he lay; but below it was steep and he could see the dark of the oiled road winding through the pass.
There was a stream alongside the road and far down the pass he saw a mill beside the stream and the falling water of the dam, white in the summer sunlight.

তবে ভাল লাগবে যে আমি টাইপ করার সাথে সাথে ভিএমও এই ফর্ম্যাটিংটি সম্পাদন করে (যেমন এটি পাঠ্যপথের রিফ্লোতে হয়)। এটা কি সম্ভব?

আমার বর্তমান সমাধানটি হ'ল অনুচ্ছেদে যোগদান করতে J, তারপরে চালান :'<,'>s/\. /.\r/gযা বেশ উত্তম কারণ খুব কম উদ্দীপনা এবং প্রশ্ন চিহ্ন রয়েছে, তবে আমি যদি জিকিউকে কিছুটা স্মার্ট করে তুলতে পারি তবে এটি আরও ভাল।

উত্তর:


23

'formatexpr'পছন্দ

আপনি 'formatexpr'বিকল্পটি ব্যবহার করে এটি অর্জন করতে পারেন । সহায়তা থেকে:

এক্সপ্রেশন যা জিকিউ অপারেটর বা স্বয়ংক্রিয় বিন্যাসের জন্য 'রেখাঙ্কন' দেখুন) এর জন্য বিভিন্ন রেখার ফর্ম্যাট করতে মূল্যায়ন করা হয়। যখন এই বিকল্পটি ফাঁকা থাকে 'ফর্ম্যাটপ্রিজি' ব্যবহার করা হয়।

আপনার 'formatexpr'সঠিকভাবে সেট করা gqপাঠ্য ব্যবহার করার সময় এবং সন্নিবেশ করানোর ক্ষেত্রে উভয়ই কার্যকর হবে ।

একটি সাধারণ উদাহরণ

এখানে একটি সাধারণ ভিমস্ক্রিপ্ট ফাংশন এবং সংশ্লিষ্ট 'formatexpr'মান যা কাজটি করা উচিত। আমি এটি সমস্ত প্রান্তের কেসের আশেপাশে পরীক্ষা করে দেখিনি, তবে এটি আমার সাধারণ পরীক্ষার জন্য দুর্দান্তভাবে কাজ করেছে।

function! MyFormatExpr(start, end)
    silent execute a:start.','.a:end.'s/[.!?]\zs /\r/g'
endfunction

set formatexpr=MyFormatExpr(v:lnum,v:lnum+v:count-1)

ব্যাখ্যা

অভিব্যক্তি হ'ল ফাংশনে একটি কল MyFormatExpr(), সূচনাটি প্রয়োগ করা হবে যার উপর এবং শেষ লাইনে চলে passing এই লাইনগুলি স্বয়ংক্রিয়ভাবে পপুলেটেড ভেরিয়েবলগুলি v:lnum(ফর্ম্যাট করার জন্য প্রথম লাইন) এবং v:count(বিন্যাস করার জন্য রেখার সংখ্যা ) ব্যবহার করে গণনা করা হয় ।

MyFormatExpr()ফাংশন একটি নির্মান :substituteসীমার মধ্যে পাস কমান্ড, এবং শেষ অফ বাক্য বিরামচিহ্ন পর হোয়াইটস্পেস প্রতিস্থাপন ( ., !, অথবা ?একটি newline সঙ্গে) ( \r)।

আদেশ সহকারে

  • MyFormatExpr()ফাংশন নেতৃস্থানীয় খাঁজ সংরক্ষণ করা হয় না। এটি ঠিক করার জন্য আরও কিছু পরিশীলিত যুক্তির প্রয়োজন হবে।
  • এটি অন্যদিকে প্রবাহিত হতে পারে এমন অন্যান্য প্রান্তের ঘটনাও ঘটতে পারে। এটি একটি পরীক্ষা ড্রাইভ দিন এবং প্রয়োজনীয় হিসাবে টুইট!

ওহ, হ্যাঁ এই পুরোপুরি পথে, আমার উত্তরটিকে উপেক্ষা করুন
সুকিমা

এটা সত্যিই দারুন! আমি কি চান "পরবর্তী বাক্য অগ্রসর আমি পছন্দ করি পারে ফাংশন একটি ম্যাক্রো ফেলেছেন, ); যতক্ষণ না আপনি পরিসীমা শেষে পেতে পুনরাবৃত্তি এবং একটি newline সন্নিবেশ করুন।" তারপরে এটি সম্ভবত কোনও ইন্ডেন্টেশন বিধি প্রয়োগ করবে। তবে আমার ভিম-ফু তার জন্য খুব দুর্বল। :)
নাথান লং

এটি উদাহরণস্বরূপ বিভক্ত হয় e.g. blahএবং Blah et al. 2018যা কিছুটা বিরক্তিকর। আপনি এর মতো কোনও কিছুর সাথে নিদর্শনগুলি মিলে যেতে পারেন 's/\(e\.g\|\<al\)\@<![.!?]\zs /\r/g'। আপনি যে জিনিসগুলিতে বিভক্ত হতে চান না তা এড়াতে কেবল প্রথম গোষ্ঠীতে আরও নিদর্শন যুক্ত করুন। অন্যথায়, এটি সুপার দরকারী, ধন্যবাদ। আমি এর আগে কখনও আসিনি gq, এবং gqipসহ-লেখকের পাঠ্য সম্পাদকরা মঙ্গলে ফেলেছেন এমন পাঠ্য বিন্যাসের জন্য অত্যন্ত দরকারী।
nnot101

এই আচরণটি ডিফল্ট আচরণে যুক্ত করার কোনও উপায় আছে কি? আমি একটি প্রদত্ত পাঠ্য প্রস্থে মোড়াতে সক্ষম হতে চাই, পাশাপাশি বাক্য শেষে বিভাজন
করাতে

1

ঠিক আছে আপনি কিছু মানচিত্র এবং স্বতঃসংশ্লিষ্ট সেট আপ করতে পারেন:

function! AddSentenceMaps()
  imap .<Space> .<CR>
  imap !<Space> !<CR>
  imap ?<Space> ?<CR>
  exec "nmap gq vipJ:s/\\([.!?]\\)\\s\\+/\\1\\r/g<CR>"
endfunction

autocmd Filetype customtxt call AddSentenceMaps()

তারপরে কেবল ফাইল টাইপটি কাস্টম টেক্সটে সেট করুন বা AddSentenceMapsফাংশনটিকে ম্যানুয়ালি কল করুন ।


0

আমি এই সমস্যাটি সম্পর্কে আমার চিন্তাভাবনা যুক্ত করতে চাই। সাধারণত লোকে এই ধরণের বৈশিষ্ট্য চায় কারণ মোড়ানো রেখাগুলিতে ঝাঁপিয়ে পড়ার সময় কোডগুলি jএবং kকম্যান্ডস যা ভিমের ডিফল্ট আচরণ। মোড়ানো রেখাগুলির মাধ্যমে নেভিগেশনের জন্য আমি ব্যবহার করি gj- নীচে সরান এবং gk- উপরে সরান। এছাড়াও জি- উপসর্গযুক্ত অংশগুলির রিম্যাপ স্ট্যান্ডার্ড jএবং kকমান্ডের সম্ভাবনা রয়েছে তবে আইএমএইচও এটি ওভারকিল হবে।


অথবা যে remaping করতে একটি কী আছে jএবং kকরতে gjএবং gkআপনি এটি করতে চান যখন ;-)
এন্থনি

0

এটি পুনরায় ফর্ম্যাট করার বিষয়ে আপনার নির্দিষ্ট প্রশ্নের উত্তর দেয় না, তবে 'সেট র‌্যাপব্যাক' একসাথে 'সেট লাইনব্রেক' সম্পাদনা লম্বা লাইনগুলিকে সম্পাদনকে আরও আনন্দদায়ক করে তুলতে পারে। মোড়কানো লাইনের মধ্যে নেভিগেট করতে gj এবং gk এর সাথে এটি একত্রিত করুন। আমি উপরের এবং নীচে তীরগুলি যথাক্রমে gj এবং gk এ ম্যাপ করি যাতে বাস্তব লাইন বা ভিজ্যুয়াল লাইনের উপরে ও নিচে চলার মধ্যে আমার পছন্দ থাকে। হোম / প্রান্ত থেকে g0 / g wise এর মতো বুদ্ধিমান $

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