আপনি কীভাবে ভিমে একটি স্ট্রিং "chomp" করবেন?


32

ধরুন আপনি নীচের টুকরো টুকরোটি চালাচ্ছেন:

let @z = system("date")

এটি এখনকার তারিখের একটি স্ট্রিং সংস্করণ z রেজিস্টারে রাখবে, তবে স্ট্রিংটি একটি নতুন লাইনের সাথে শেষ হবে যা আমি চাই না। chompস্ট্রিংয়ের পেছনের নতুন লাইনের হাত থেকে মুক্তি পাওয়ার জন্য কি কোনও অন্তর্নির্মিত উপায় (পার্লের মতো ) রয়েছে?

উত্তর:


24

আপনি substitute()কোনও ফাংশন ব্যবহার বা সংজ্ঞা দিতে পারেন :

function! Chomp(string)
    return substitute(a:string, '\n\+$', '', '')
endfunction

এই রূপটি আপনার systemজন্য কল করবে এবং তারপরে ফলাফলটি চমক করবে:

function! ChompedSystem( ... )
    return substitute(call('system', a:000), '\n\+$', '', '')
endfunction

(এই ফাংশনটি আমার পাওয়া যায় ইঙ্গো-গ্রন্থাগার প্লাগইন হিসাবে ingo#system#Chomped।)


এটি কাজ করে, তবে অদ্ভুত callবাক্য গঠন কেন ? কেন কেবল Chompএকটি প্যারামিটার বলা হয় না stringএবং তারপরে পাস করা a:stringহয় না substitute?
— বিডিশাম

2
@ বিডিশাম কারণ Chomp()এটি যে আর্গুমেন্টে পৌঁছেছে তা পেরিয়ে যাচ্ছে system(), এর আউটপুট থেকে পেছনের নতুন লাইনটি কেটে ফিরছে এবং তা ফিরিয়ে দিচ্ছে।
— জামেসান

ঠিক। system()একটি alচ্ছিক {input}যুক্তি আছে, এবং এটি সাধারণভাবে এইগুলির কোনও পরিচালনা করে। আপনার যদি এটির প্রয়োজন না হয়, কেবল এটি প্রচলিত উপায়ে করুন।
— ইনগো কারকাত

25
let @z = systemlist('date')[0]

আপনার জন্য নিউলাইন সরিয়ে দেয়।


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

5
নোট করুন যে এটি সিস্টেমগুলিতে সঠিকভাবে কাজ করবে না যা \nনিউলাইন ছাড়া অন্য কিছু ব্যবহার করে । systemlist()শুধুমাত্র অপসারণ করে \n, কোনওটি নয় \r।
— জামেসান

4

ক্রিশ্চিয়ান ব্র্যাব্যান্ড সুপারuser.com- এ বিভিন্ন ধরণের পদ্ধতি তালিকাভুক্ত করেছে ।

আমি এটি পছন্দ করি কারণ এটি সংক্ষিপ্ত:

let @z = system("date")[:-2]

আমি অবাক হই যে এটি কীভাবে \r\nলাইনের শেষের
— ধরণটি

@ এক্স-ইউরি এটি অবশ্যই পরীক্ষা করার উপযুক্ত যে এ সম্পর্কে আমাকে উদ্ধৃতি দেবেন না, তবে আমি মনে করি ভিম-অন-উইন্ডোজ \nসেগুলি ফিরিয়ে দেওয়ার আগে সেই লাইন-এন্ডিংগুলিকে স্বাভাবিক করবে ।
— জোয়েটউইডল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.