"টোডো" গোষ্ঠীতে কোনও চিহ্ন সাইন করা সম্ভব?


9

যখনই লাইনে একটি টোডো গ্রুপ রয়েছে (টোডো, ফিক্সএমই ...) তখন কি লক্ষণগুলির কলামে প্রদর্শিত হতে একটি চিহ্ন যুক্ত করা সম্ভব?

আমার কালারচিমে টুইট করে আমি টোডো গ্রুপের হাইলাইটটি পরিবর্তন করেছি, তবে সিন্টাস্টিক ত্রুটি ও সতর্কতাগুলির মতো লক্ষণগুলির কলামে একটি সূচক রাখতে চাই।

উত্তর:


9

এই ফাংশনটি ব্যবহার করে দেখুন:

function! SignKeyword()

    silent! sign undefine todo

    sign define todo text=>> texthl=Search

    g/\v\C(<TODO>|<FIXME>)/execute "sign place 9999 line=" . line('.')
    \ . " name=todo buffer=" . bufnr('')

    nohlsearch

endfunction

এখন কমান্ড লাইনে ফাংশনটি কল করুন:

:call SignKeyword()

অথবা ~/.vimrcএটিকে কল করতে আপনার একটি ম্যাপিং যুক্ত করুন :

nnoremap <your mapping> :call SignKeyword()<cr>

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

autocmd FileType markdown call SignKeyword()

ফাংশনের প্রথম লাইনটি silent! sign undefine todoসাইন টুডোটি ইতিমধ্যে উপস্থিত থাকলে তা মুছে দেয়, যাতে আপনার চিহ্নগুলি যদি কোনও লাইন মুছে ফেলার বা যুক্ত করার পরে ভুল জায়গায় স্থানান্তরিত হয়, আপনি তাৎক্ষণিকভাবে ঠিক করার জন্য ফাংশনটি পুনরায় স্মরণ করতে পারেন।


দ্বিতীয় লাইনটি এমন একটি চিহ্নকে সংজ্ঞায়িত করে যার নাম টোডো, যার পাঠ্য >>(আপনি নিজের পছন্দ অনুসারে এটি পরিবর্তন করতে পারেন) এবং যা অনুসন্ধান হাইলাইটিং গ্রুপ ব্যবহার করে (একই জিনিস)।


তৃতীয় লাইনে গ্লোবাল কমান্ড ব্যবহার করা হয়েছে:

:g/pattern/command

গ্লোবাল কমান্ড প্রতিটি লাইনে একটি কমান্ড কার্যকর করে যা একটি প্যাটার্নের সাথে মেলে।

এখানে প্যাটার্নটি হ'ল \v\C(<TODO>|<FIXME>)যার অর্থ TODO বা FIXME শব্দটি সম্বলিত কোনও লাইন । রেজেক্সে
পরমাণু অন্তর্ভুক্ত থাকে \Cযাতে অনুসন্ধানটি কেসটিকে সম্মান করে (আপনার 'উপেক্ষা' বিকল্পটি কী তা নয়)। আপনি যদি অনুসন্ধানটি কেসটিকে সম্মান না করে চান তবে এটিকে পরিবর্তন করুন \c

যখনই এই জাতীয় লাইন পাওয়া যায় তখন ফাংশন দ্বারা নিম্নলিখিত লাইনটি কার্যকর করা হয়:

execute "sign place 9999 line=" . line('.')
    \ . " name=todo buffer=" . bufnr('')

এটি :executeনিম্নলিখিত আদেশের সামগ্রীটি ( আদেশ সহ) কার্যকর করে:

"sign place 9999 line=" . line('.') . " name=todo buffer=" . bufnr('')

স্ট্রিংটিতে দুটি ভিম অন্তর্নির্মিত ফাংশন রয়েছে: line()এবং bufnr()
line('.')গ্লোবাল কমান্ড দ্বারা কোনও ম্যাচ পাওয়া গেলে বর্তমান লাইনের bufnr('.')সংখ্যাটি প্রদান করে এবং বর্তমান বাফারের সংখ্যাটি প্রদান করে।

সুতরাং উদাহরণস্বরূপ, যদি গ্লোবাল কমান্ড বাফার 5-তে 10 নং লাইনে কোনও মিল খুঁজে পায় তবে তা দেবে:

"sign place 9999 line=" . 10 . " name=todo buffer=" . 5

বিন্দুগুলি স্ট্রিংগুলিকে একত্রিত করে এবং তাই এটি শেষ পর্যন্ত মূল্যায়ন করবে:

"sign place 9999 line=10 name=todo buffer=5"

কোনটি হ'ল :signবাফার 5-তে 10 লাইনটিতে একটি সাইন রাখার কমান্ডটি
for


ফাংশনের চতুর্থ লাইনটি :nohlsearchমিলিত নিদর্শনগুলির হাইলাইটিং অক্ষম করে।

সম্পাদনা: আমি রেজেক্স ঠিক করেছি, আসলটি ভুল ছিল। আমি লিখেছিলাম ^[TODO|FIXME]তবে পরিবর্তে আমার মনে হয় এটি হওয়া উচিত \v\C(<TODO>|<FIXME>)। অসুবিধার জন্য দুঃখিত, আমি এখনও ভিমস্ক্রিপ্ট শিখছি।


1
TODOমন্তব্যটি মুছে ফেলা হলে কীভাবে সাইনটি সরিয়ে ফেলবেন?

1
এটিই আমি প্রত্যাশা করেছিলাম না, কারণ এটি সমস্ত todoলক্ষণগুলি সরিয়ে দেয় , তবে কেবল লক্ষ্য করেছেন যে লাইনটি সরিয়ে দিয়ে চিহ্নটি সরিয়ে দেওয়া হয়েছে, তাই ঠিক

1
ঠিক আছে, আমি ফাংশন শুরুতে এই লাইন যুক্ত করেছি: silent! sign undefine todo। এটি ইতিমধ্যে উপস্থিত থাকলে সাইন টোডো মোছা করে, যাতে TODO বা FIXME কীওয়ার্ডযুক্ত কীওয়ার্ড যুক্ত একটি লাইন মুছে ফেলার পরে যদি আপনার চিহ্নগুলি ভুল জায়গায় স্থাপন করা হয় তবে আপনি তাৎক্ষণিকভাবে ঠিক করার জন্য ফাংশনটি পুনরায় স্মরণ করতে পারেন।
saginaw

2
রেজেক্সটি ভুল ছিল, আমি টাইপ করেছিলাম ^[TODO|FIXME]তবে পরিবর্তে এটি হওয়া উচিত ছিল \v(TODO|FIXME)। নতুন রেজেক্স একটি কিওয়ার্ডযুক্ত রেখার সাথে মিলবে তবে লাইনের সূচনা নয়, কারণ আমি মনে করি যে কোনও লাইনে উদাহরণের মতো কোনও মন্তব্যের আগে কিছু কোড থাকতে পারে some code # FIXME this line needs to be fixed। পূর্ববর্তী রেজেক্সটি পুরোপুরি ভুল ছিল, অসুবিধার জন্য দুঃখিত, আমি এখনও ভিমস্ক্রিপ্ট শিখছি ...
saginaw

1
এই পদ্ধতির সমস্যাটি হ'ল, এটি বাজেভাবে সিঙ্কের বাইরে চলে যাবে, আপনি যদি বাফারটি সংশোধন করেন, যেমন একটি টোডো লাইনের উপরে অন্য লাইন যুক্ত করুন।
খ্রিস্টান ব্র্যাব্যান্ড 18

6

আপনি আমার ডায়নামিকসাইনস প্লাগইন ব্যবহার করতে পারেন । এটি তথাকথিত "SignExpression" এর জন্য অনুমতি দেয় যা ভাঁজ প্রকাশের সাথে সমান।

সুতরাং আপনি সহজভাবে করতে পারেন :SignExpression getline(v:lnum)=~'TODO'?'Warning':0

কী সম্ভব তা আরও উদাহরণের জন্য সহায়তা পড়ুন।

আমার প্লাগইনটি ব্যবহার করার সুবিধাটি হ'ল এটি বাফারগুলির পরিবর্তনগুলি ট্র্যাক করে এবং ততক্ষণে চিহ্নগুলি সামঞ্জস্য করে।

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