আপনি কীভাবে ভিমে একটি স্ট্রিং "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.