কীভাবে লম্বা লম্বা লম্বা ভাঙবেন?


12

আমার মতো একটি বেশ বড় টেক্সট ফাইল রয়েছে যার মতো ব্লক রয়েছে

Short line.
Really long line.
Short line.

খালি লাইন দ্বারা পৃথক করা, এবং আমি লম্বা লাইনগুলি ভাঙ্গতে এবং পছন্দ মতো ব্লকগুলি পেতে ভিএম (লিনাক্সে) ব্যবহার করতে চাই

Short line.
This was
part of
a long line.
Short line.

gq(এবং gw) এর সাথে আমার সমস্যাটি হ'ল এটি প্রতিটি ব্লককে সম্পূর্ণ অনুচ্ছেদে হিসাবে প্রতিবিম্বিত করে, অর্থাত্ এটি প্রতিটি ব্লকের মধ্যে দুটি লাইন বিরতি সংরক্ষণ করে না, এবং বিন্যাসের :help fo-tableকোনও gqবিকল্প অনুসারে আমাকে যা করতে চান তা করতে দেয় না। আমি আরও ভেবেছিলাম যে আমি যদি নতুন লাইন চরিত্রগুলিকে অনুচ্ছেদে ডেলিফিটর হিসাবে সংজ্ঞায়িত করতে পারি তবে আমি আমার লক্ষ্য অর্জন করতে পারি তবে :help paragraphসেগুলি অনুসারে হার্ড-কোডেড।

সম্পাদনা: আমি জানি যে আমি প্রতিটি লম্বা লাইন একের পর এক ব্যবহার করতে gqবা gwফর্ম্যাট করতে পারি, কিন্তু যেহেতু আমার ফাইলটি কয়েক হাজার লাইনের উপরে চলেছে আমি স্বয়ংক্রিয়ভাবে এটি অর্জনের জন্য একটি উপায় খুঁজছি।


উপায় দ্বারা: আমি ভিএম এর ডকুমেন্টেশনে আমার সমস্যার সমাধান অনুসন্ধান করেছি, এখানে এসইউ এবং ওয়েবে খালি আসছি। যদি আমি সুস্পষ্ট কিছু উপেক্ষা করি তবে আমি আনন্দের সাথে এই প্রশ্নটি মুছব।
এপি


@ মার্টিনশ্রেডার: একজন vi এসই আছে তা জেনে খুশি! এই উত্তরগুলি আমার সমস্যাটির সমাধান করে না, যদিও আমি ইতিমধ্যে gqএবং এর সম্পর্কে আগে থেকেই জানতাম gw। আমিও খুশি যে আমি সেখানে থামিনি, অন্যথায় আমি :gকমান্ড সম্পর্কে জানতাম না । :)
এপি

উত্তর:


16
:%norm! gww

এটি কাস্টমাইজড ম্যাপিংগুলিকে অ্যাকাউন্টে না নিয়ে (উদাহরণস্বরূপ অন্য কোনও কিছুতে ম্যাপ করা থাকলে সমস্যা এড়াতে) পুরো বাফারে normalকমান্ডটি gww(যা বর্তমান লাইনের সাথে ফর্ম্যাট করে gw) প্রয়োগ করে gw

দেখা

  • :help :%
  • :help :norm
  • :help gww

এই বিকল্পটি মন্তব্যগুলিতে বেনের পরামর্শ অনুসারে, এবং মূল সমাধানের চেয়ে আরও সোজা which যা নীচে সংরক্ষণ করা হয়েছে কারণ নিয়মিত মত প্রকাশের সামঞ্জস্যের সামর্থ্যের কারণে এটি অন্যান্য অনুরূপ পরিস্থিতিতে আরও ভাল ফিট হতে পারে fit "সমস্ত লাইন মেলে" ক্ষেত্রে, এটি অযথাই হিংস্র হয়।


gwwবাফারে প্রতিটি স্বতন্ত্র লাইনে প্রোগ্রামক্রমে প্রয়োগ করা:

:g/^/norm gww

দেখুন :help :gএবং :help norm^একটি লাইনের শুরুর সাথে মেলে যা অনুশীলনে এই ম্যাচটি প্রতিটি লাইনকে তৈরি করে

একটি উদাহরণস্বরূপ 60 টি অক্ষরের চেয়ে লম্বা লাইনগুলি বেছে নিতে বেছে নিতে পারে

:g/\%>60v/norm gww

(দেখুন :help \%<) তবে gwwবাস্তবে কেবল textwidthযেকোন সময়ের চেয়ে লাইনগুলি পুনরায় ফর্ম্যাট করবে , সুতরাং এটি গতি বা ফলাফলের ক্ষেত্রে খুব বেশি গুরুত্ব পাবে না।

(আমি v"কলাম" এর পরিবর্তে "ভার্চুয়াল কলাম" ব্যবহার করছি c, যেহেতু পরবর্তীকৃত সত্যিকার অর্থে লাইনটিতে নির্দিষ্ট সংখ্যক বাইট গণনা করে multi মাল্টিবাইট এনকোডিংগুলি ব্যবহার করার সময় এটি অপ্রত্যাশিত ফলাফলের দিকে নিয়ে যেতে পারে, যা প্রায়শই সতর্ক হওয়ার কারণ হয়। বাস্তবে এটি উপরের মত একই কারণে বাস্তব সমস্যা নয়, এটি যেহেতু gwwলাইনগুলি সংক্ষিপ্ত আকারে সংশোধন করবে না textwidth))


দৃশ্যত :gকোনও নিদর্শন ছাড়াই ব্যর্থ হয়, তাই :g//norm gwwকাজ করে না তবে :g/.*/norm gwwহয়।
এপি

@ এপি: হু, আমার পক্ষে কাজ করে। আমি ডেবিয়ান অস্থির থেকে ভিএম 7.4.488-6 ব্যবহার করছি।
ড্যানিয়েল অ্যান্ডারসন

4
:g//সর্বশেষ অনুসন্ধানের ধরণটি পুনরায় ব্যবহার; যদি কিছুই না থাকে তবে এটি ব্যর্থ হয়। সমস্ত লাইনে :g/^/প্রয়োগ করতে ব্যবহার করুন ।
ইনগো কারকাত

@ ইঙ্গোকারকাট: আহ, তা বোঝা যায়, যেহেতু পরীক্ষাগুলির সময় আমার শেষ প্যাটার্নটি ছিল যে আমি পরে দেখিয়েছি তা লাইন দৈর্ঘ্যের সচেতন ছিল। আমি উত্তর আপডেট করব। আপনি কি জানেন যে সহায়তায় কোথায় এই "খালি প্যাটার্ন" আচরণের কথা বলা হয়েছে? তুচ্ছভাবে এটি খুঁজে পাচ্ছি না।
ড্যানিয়েল অ্যান্ডারসন

ম্যানুয়ালটি দেখে, সম্ভবত বোঝানো হয়েছে যে :help last-patternসাধারণ অনুসন্ধানের জন্য প্রদত্ত তথ্য :globalকমান্ডের ক্ষেত্রেও প্রযোজ্য ।
ড্যানিয়েল অ্যান্ডারসন

4

যেহেতু আপনি ইতিমধ্যে জন্য ম্যানুয়াল পড়েছি gqএবং gwকমান্ড, আমি জিনিসটা আপনি সম্ভবত নিজে দীর্ঘ লাইন থেকে সরানোর এবং তারপর ব্যবহার না করে আরও বেশি সুবিধাজনক কিছু করতে চান gw0, gw$বা অন্য gwকমান্ড শুধুমাত্র বর্তমান লাইন ফরম্যাট করতে।

আমি কোনও পাঠ্যের ব্লক ধরে ভিমে দীর্ঘ লাইন ভাঙার সহজ উপায় জানি না। তবে, যেহেতু আপনি উল্লেখ করেছেন যে আপনি জিএনইউ / লিনাক্স সিস্টেমে ভিম ব্যবহার করছেন, আমি আপনার পাঠ্যটি জিএনইউ fmtকমান্ডের মাধ্যমে ফিল্টার করার পরামর্শ দিচ্ছি ।

পুরো ফাইলের জন্য:

:%!fmt --width=75 --split-only

বর্তমান অনুচ্ছেদের জন্য (সংক্ষিপ্ত বিকল্পগুলি ব্যবহার করে):

:'{,'}!fmt -75 -s

প্রাসঙ্গিক fmtবিকল্পগুলির ব্যাখ্যা :

  • -w, --width=WIDTH- সর্বাধিক লাইনের প্রস্থ (75 কলামের ডিফল্ট)। বিকল্পটি -WIDTHসংক্ষিপ্ত আকারের --width=DIGITS(যদি এই সংক্ষিপ্ত সংস্করণটি ব্যবহার করা হয় তবে এটি অবশ্যই প্রথম বিকল্প হতে হবে)।

  • -s, --split-only- দীর্ঘ লাইন বিভক্ত, কিন্তু পুনরায় পূরণ না; এটি হ'ল বিকল্পটি যা আপনার পূর্ব-বিদ্যমান হার্ডলাইন ব্রেকগুলি সংরক্ষণ করে।


উল্লেখ করার জন্য ধন্যবাদ fmt। আমি অন্য উত্তরটি গ্রহণ করতে পছন্দ করেছিলাম, যদিও এটির জন্য কেবল ভিআইএম প্রয়োজন।
এপি

@AP কোনও উদ্বেগ নেই। এটি একটি দুর্দান্ত উত্তর এবং আমি নিজেই এটি গ্রহণ করেছি। এটি এবং আপনার প্রশ্ন উভয়েরই যোগ্যতা রয়েছে।
অ্যান্টনি জিওগিগান

1

থেকে:

Short line.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
Short line.

"লরেম ইপসাম" লাইনে চিহ্নিতকারী রেখে gwwফলন টিপুন ( textwidth=40স্পষ্টতার সাথে):

Short line.
Lorem ipsum dolor sit amet, consectetur
adipiscing elit, sed do eiusmod tempor
incididunt ut labore et dolore magna
aliqua. Ut enim ad minim veniam, quis
nostrud exercitation ullamco laboris
nisi ut aliquip ex ea commodo consequat.
Short line.

আমার কাছে যা মনে হচ্ছে আপনি যা চাইছেন তা মনে হচ্ছে। যদি তা না হয় তবে নির্দ্বিধায় স্পষ্ট করে বলুন।

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