খাঁটি উইমস্ক্রিপ্টের বিকল্প (`: s` ছাড়াই)


12

আমার ভিএমআরসি-তে নিম্নলিখিতগুলি রয়েছে:

func! AddSpaceBeforeEqual()
  s/\([a-z)_0-9"'\[\]]\)=/\1 =/ge
endfunc

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

প্রোহিবিটকমন্ড উইথইনটেটেডসাইড এফেক্ট অনিচ্ছাকৃত পার্শ্ব প্রতিক্রিয়াযুক্ত কমান্ডগুলি এড়িয়ে চলুন। কার্সারটি সরানো এবং ত্রুটি বার্তাগুলি মুদ্রণ করার সাথে সাথে: s [অবস্টিট] ব্যবহার করা এড়িয়ে চলুন। স্ক্রিপ্টগুলির জন্য উপযুক্ত ফাংশনগুলি (যেমন অনুসন্ধান ()) পছন্দ করুন better অনেকগুলি ভিএম কমান্ডের জন্য, ফাংশনগুলি বিদ্যমান যা কম পার্শ্ব প্রতিক্রিয়া সহ একই কাজ করে। বিল্ট-ইন ফাংশনগুলির তালিকার জন্য: সহায়তা ফাংশন () দেখুন। গুগল ভিমস্ক্রিপ্ট স্টাইল গাইড

তবে, আমি মনে করি না যে তারা :sকমান্ডটি ব্যবহার না করেই প্রতিস্থাপনের উপায় ।

উদাহরণস্বরূপ, search()ফাংশনটি একটি প্যাটার্নের সাথে মিলিত লাইনগুলি দেয় তবে প্রতিস্থাপনের কোনও উপায় নেই। substitute()ফাংশন একটি স্ট্রিং উপর কাজ করে, এবং সামগ্রিকভাবে ফাইলে প্রতিস্থাপন করে না।

আমি কি একটি বিকল্প পদ্ধতি নিজেই প্রয়োগ করব, বা আমার ফাংশনটি পুনরায় লেখার জন্য সেগুলি কি স্মার্ট উপায়?

উত্তর:


10

আপনার ফাংশনটির একটি সরল বাস্তবায়ন এখানে লেখা হয়েছে substitute():

function! AddSpaceBeforeEqualInWholeBuffer()
    let l = 1
    for line in getline(1,"$")
        call setline(l, substitute(line, '\([^= ]\)=', '\1 =', "g"))
        let l = l + 1
    endfor
endfunction

স্বাদে অনুসন্ধানের প্যাটার্নটি সামঞ্জস্য করুন।


10

অনিচ্ছাকৃত পার্শ্ব প্রতিক্রিয়া সম্পর্কে এটি আপনাকে সতর্ক করার কারণ হ'ল :substituteকার্সারটি সরানো এবং পূর্ববর্তী অনুসন্ধান (যদি কোনও ফাংশনের বাইরে ব্যবহার করা হয়) ওভাররাইট করে । তবে এর অর্থ এই নয় যে আপনি এটি ব্যবহার করবেন না, কারণ এর পার্শ্ব প্রতিক্রিয়াগুলি আপনি বিপরীত করতে পারেন :substitute। উদাহরণস্বরূপ, এখানে আমি তৈরি করেছি এমন একটি ফাংশন যা ট্রেইলিং হোয়াইটস্পেস স্ট্রিপ করতে বিকল্প কমান্ডটি ব্যবহার করে:

function! StripTrailingWhitespace()
    " Save cursor position
    let l:save = winsaveview()
    " Remove trailing whitespace
    %s/\s\+$//e
    " Move cursor to original position
    call winrestview(l:save)
    echo "Stripped trailing whitespace"
endfunction

নোট করুন যে আপনি :markকার্সার অবস্থান সংরক্ষণ করতে কমান্ডটি ব্যবহার করতে পারেন , তবে এর অর্থ হ'ল আপনি যে চিহ্নটি ব্যবহার করার সিদ্ধান্ত নিয়েছেন সেটি ওভাররাইট করা হবে। আমি এর আগে ভিন্ট ব্যবহার করি নি, তবে লিটারগুলির একটি টিপ হ'ল আপনি তাদের সতর্কতাগুলি লবণের দানা দিয়ে নিতে পারেন। এই ক্ষেত্রে, এটি সত্য যে এর :substituteপার্শ্ব প্রতিক্রিয়া রয়েছে, তবে এগুলি পার্শ্ব প্রতিক্রিয়া যা প্রতিরোধ করা যেতে পারে। এছাড়াও, কোনও উপায় অনুসন্ধান এবং প্রতিস্থাপনের আর কোনও উপায় নেই।


6
শেষ-ব্যবহৃত অনুসন্ধান শব্দটি কোনও ফাংশন ছেড়ে যাওয়ার পরে স্বয়ংক্রিয়ভাবে পুনরুদ্ধার করা হয়, সুতরাং কোনও ফাংশনের অভ্যন্তরে এটি ব্যবহার করার সময় সংরক্ষণ এবং পুনরুদ্ধার প্রয়োজন হবে না। দেখুন:help function-search-undo
মার্টিন টর্নোইজ

1
বরং কার্সার () এর পরিবর্তে উইনস্যাভিউ ভিউ () / উইনরেস্টভিউ () ব্যবহার করুন
ক্রিশ্চিয়ান ব্র্যাব্যান্ড ২১

1

:sকমান্ড একটি বিশুদ্ধ Vimscript পন্থা।

আমার অনুমানটি হ'ল সতর্কবার্তার একমাত্র অর্থ, কার্সারটি সম্ভবত তার ব্যবহারের পরে ভুল winsaveview()জায়গায় winrestview()স্থাপন করা হবে (যা আপনি আগে ব্যবহারের পরে ফাংশন এবং কমন্ড ব্যবহার করে অবরুদ্ধ করতে পারেন )। এছাড়াও আপনার সম্ভাব্য ত্রুটিগুলি ঘটতে পারে তার যত্ন নেওয়া দরকার। এটি সাধারণত eপতাকা ব্যবহার করে পরিচালনা করা হয় । এছাড়াও সেটিংয়ের মতো কিছু সেটিংসের যত্ন নেওয়া দরকার gdefaultযা gপতাকাটির অর্থ উল্টায় ।

একজনকে সেই নির্দিষ্টকরণগুলির যত্ন নেওয়া দরকার এবং এটি সম্ভবত এই সতর্কতার মূল কারণ। তবে এর অর্থ হ'ল :sকমান্ডের ব্যবহার এড়ানো নয় । :sআপনি যদি বর্তমান বাফারে কিছু প্রতিস্থাপন করতে চান তবে কমান্ডটি ব্যবহার করা পুরোপুরি ঠিক ।

(দ্রষ্টব্য, একজন অবশ্যই সমস্ত লাইনের মধ্য দিয়ে লুপ করতে পারেন এবং একটি অনুসন্ধান () / গেটলাইন () / সেটলাইন () পদ্ধতির ব্যবহার করতে পারেন But তবে এটি সাধারণত ধীর হয়))

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