আমি কি ভিমস্ক্রিপ্টে রেকর্ড করছি তা সনাক্ত করার কোনও উপায় আছে?


11

এর মতো কিছু আছে কি?

eval("is_recording()")

আমি বর্তমানে আমার ম্যাক্রো রেকর্ড করছি কিনা তা জানতে আমার ভাইসস্ক্রিপ্টে কল করতে পারি? আমি এই কাজগুলি ভাবতাম:

eval("mode(1)")

কিন্তু যে ঠিক ফিরে "n"

এটি গুরুত্বপূর্ণ কিনা তা নিশ্চিত নয়, তবে আমি নিওভিম ব্যবহার করছি, সুতরাং এটি যদি নেওভিমের সাথে একচেটিয়া থাকে তবে তা ঠিক।


3
আইএমএইচও এটি একটি খারাপ ধারণা হবে - "রেকর্ডিং", এক্ষেত্রে, একটি মিথ্যা নাম হয়ে যাবে :) আপনি কী করার চেষ্টা করছেন তা জানেন না, তবে সম্ভবত এই প্রশ্ন জিজ্ঞাসা করা এটি সমাধানের বিভিন্ন উপায় প্রদান করতে পারে।
ভ্যানলাসার

@ ভ্যানল্যাসার মিথ্যা নাম বলতে কী বোঝ?
জেমস

1
আপনি যখন এটি রেকর্ডিংয়ের সময় কোনও ভিম ​​ক্রিয়াটি আলাদা করেন, তার অর্থ রেকর্ডিং প্রক্রিয়া নিজেই ক্রিয়াকে প্রভাবিত করে, যখন এটি পরবর্তী পুনরাবৃত্তির জন্য কেবল "স্টোর" করা উচিত। আপনি যখন ম্যাক্রো চালাবেন তখন আপনি কী হওয়ার প্রত্যাশা করবেন?
ভ্যানলাসার

উত্তর:


4

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

এখন এখানে কার্যনির্বাহী, এটি সম্ভবত আদর্শ নয় এবং অবশ্যই খুব দৃ rob় নয় তবে আপনি এই লাইনগুলিকে আপনার যুক্ত করতে পারেন .vimrc:

let g:isRecording = 0
nnoremap Q :call ToggleRecording()<CR>q

function! ToggleRecording()
    let g:isRecording = !g:isRecording
    echo "is recording " . g:isRecording
endfunction

ধারণাটি হ'ল আপনি যখন qস্বাভাবিক মোডে চাপেন তখন "রেকর্ডিং মোড" একচেটিয়াভাবে টগল করা হয় ।

এর উপর ভিত্তি করে আপনি একটি পরিবর্তনশীল তৈরি করেন g:isRecordingযা প্রতিবার আপনি রেকর্ডিং শুরু বা বন্ধ করলে টগল করা হবে। আপনি যখন রেকর্ডিং শুরু g:isRecordingকরবেন তখন এইভাবে সেট করা হবে 1এবং 0কখন আপনি রেকর্ডিং বন্ধ করবেন। তারপরে আপনি ভেরিয়েবলের মানটির মাধ্যমে রেকর্ডিং স্থিতিতে অ্যাক্সেস করতে পারেন।

"অপূর্ণতা" হ'ল পুনরাবৃত্তি ম্যাপিং এড়ানোর জন্য, আপনাকে Shit-q পরিবর্তে রেকর্ডিং শুরু এবং বন্ধ করতে ব্যবহার করতে হবে q(মনে রাখবেন যে এটি এত বড় সমস্যা নয়: আমি shift-qকিছু সময়ের জন্য রেকর্ড মোড টগল করতে ব্যবহার করছি কারণ আমি আসল shift-qআচরণটি পছন্দ করি না )

এই সমাধানটির মূল সমস্যাটি হ'ল আপনি যদি এটির কথা ভুলে যান এবং qভেরিয়েবলটি ব্যবহার করেন তবে টগল করা হবে না তবে আপনি অক্ষম করতে পারবেন না q(উদাহরণস্বরূপ nnoremap q <nop>) কারণ আপনি যদি shift-qআর কাজ করেন না।


2

ম্যাক্রো রেকর্ড করার জন্য কোনও "মোড" নেই বলে এটি একটি দুর্দান্ত কৌতূহল অনুরোধ। কিছু দস্তাবেজ খননের পরে আমি নিম্নলিখিতটি খুঁজে পেয়েছিusr_10

আপনি প্রথম লাইনের প্রথম চরিত্রে স্থানান্তরিত করে শুরু করুন। পরবর্তী আপনি নিম্নলিখিত কমান্ডগুলি কার্যকর করুন:

qa নিবন্ধে একটি ম্যাক্রো রেকর্ডিং শুরু করুন ।

The লাইনের শুরুতে সরান।

আমি # এর মধ্যে লাইনের শুরুতে "স্ট্রিং # অন্তর্ভুক্ত করুন" অন্তর্ভুক্ত করে।

The লাইনের শেষ প্রান্তে যান।

একটি "রেখার শেষে অক্ষর ডাবল উদ্ধৃতি চিহ্ন (") যুক্ত করুন।

j পরবর্তী লাইনে যান।

q ম্যাক্রো রেকর্ডিং বন্ধ করুন।

আমার কাছে স্ট্যান্ডআউট জিনিসটি ছিল "একটি রেজিস্টারে ম্যাক্রো রেকর্ডিং শুরু করুন" সম্পর্কে লাইন

যেহেতু প্রতিটি ম্যাক্রো একটি রেজিস্টারে ডিফল্টরূপে সংরক্ষিত হতে চলেছে আমি আশা করি যে আমরা এটি :regতালিকায় দেখতে সক্ষম হব । দেখা যাচ্ছে এটি কবজির মতো কাজ করে!

উদাহরণ:

সাধারণ মোডে: qaisomething<Esc>

এবং ভিতরে :regআমরা প্রবেশ দেখতে!

"a   isomething^[

সেই জ্ঞানের সাহায্যে আপনার ম্যাক্রো রেকর্ড করা হচ্ছে কিনা তা নিশ্চিত করতে নিবন্ধগুলিতে "গুপ্তচর" রাখতে সক্ষম হবেন (প্রতিটি রেকর্ডিংয়ে একটি নাম রেজিস্টার ব্যবহার করুন [ qসর্বদা একই রেজিস্টার ব্যবহার করার জন্য মানচিত্র (অথবা এরকম কিছু))]

যদি আপনি সমস্যার মুখোমুখি হন তবে আমাকে জানান এবং আমি আপনাকে সাহায্য করার চেষ্টা করব (যেহেতু এই কার্যকারিতাটি আমার কাছেও নতুন: ডি)

সম্পাদনা ইয়াঙ্ক চলাকালীন রেজিস্টার ব্যবহারের বিষয়টি সম্বোধন করার জন্য আমি একটি বিশেষ ধরণের রেজিস্ট্রার যাচাই করার পরামর্শ দিই যা আপনি কেবল vimLলেখার জন্যই ব্যবহার করতে পারেন (কোনও ইয়ঙ্ক কখনও নিবন্ধটিতে নিযুক্ত থাকবে না "ay) ( )

:help registersউপলব্ধ রেজিস্টারগুলিতে কিছুটা তথ্য এখানে info

দশ প্রকারের নিবন্ধ রয়েছে: E354 নিবন্ধন করুন

  1. নামবিহীন রেজিস্টার ""

  2. 10 নম্বরযুক্ত রেজিস্টার "0 থেকে" 9

  3. ছোট মুছে ফেলুন নিবন্ধক "-

  4. 26 "এ টু" জেড বা "এ টু" জেড নিবন্ধভুক্ত করেছে

  5. তিনটি পঠনযোগ্য কেবলমাত্র রেজিস্টার ":,"।, "%

  6. বিকল্প বাফার রেজিস্টার "#

  7. এক্সপ্রেশন রেজিস্টার "=

  8. নির্বাচন এবং ড্রপ নিবন্ধগুলি "*," + এবং "~

  9. ব্ল্যাকহোল রেজিস্টার "_

  10. সর্বশেষ অনুসন্ধানের নিদর্শন রেজিস্টার "/

ধরে নিই যে আপনার এখন একটি রেজিস্টার রয়েছে যা আপনি এখন ব্যবহার করতে চলেছেন বিষয়টি "রেকর্ডিং বন্ধ হয়ে গেলে আমি কীভাবে জানি?" আমি যত্ন নিতে কটাক্ষপাত করা চাই autocmd-eventজন্য CursorHold; সহায়তা দস্তাবেজের নোটটি বেশ আশাব্যঞ্জক দেখাচ্ছে (আমি কীভাবে সাধারণ কার্সারকে আলাদা করতে পারি তা জানার চেষ্টা করবহলে যখন আপনার রেজিস্টার ম্যাক্রোর উদ্দেশ্যে লেখা হচ্ছে তখন অকার্যকর / অ-অস্তিত্বশীল ইভেন্টের তুলনায়)

CursorHold

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


সমস্যাটি কীভাবে সমাধান করা যায় তা আমি সত্যিই দেখতে পাই না: আপনি যখন আপনার ম্যাক্রো রেকর্ডিং শেষ করেন তখন একটি রেজিস্টারে একটি স্ট্রিং সংরক্ষিত হয় তবে যখন রেজিস্ট্রে কোনও ম্যাক্রো থাকে বা যখন ইয়াঙ্ক কমান্ড থেকে উদাহরণস্বরূপ কিছু উপস্থিত থাকে তখন আপনি কীভাবে পার্থক্য করবেন। এছাড়াও আপনি যখন রেকর্ডিং শেষ করেন তখন নিবন্ধকটিকে একটি শট হিসাবে সংরক্ষণ করা হয় যাতে আপনি যখন দেখতে পাবেন যে নিবন্ধের সামগ্রী পরিবর্তন হয়েছে আপনি আর রেকর্ডিং মোডে নন।
স্ট্যাটক্স

আমার আশা ছিল যে আপনি ব্ল্যাকহোল রেজিস্ট্রারের মতো কিছু ব্যবহার করতে সক্ষম হবেন (এমন একটি নিবন্ধ যা কখনও চলা যায় না)। আপনার যদি নিবন্ধটি তালাবদ্ধ থাকে তবে আপনি রেকর্ডিং মোডে থাকাকালীন কার্সরহোল্ডের কিছু বিশেষ আচরণ রয়েছে কিনা তা চেকআউট করতে পারবেন (এটি আপনাকে সহায়তা করে কিনা তা জানতে আরও কিছু তথ্যের সাথে আমার উত্তর আপডেট করবে)
ড্যান ব্র্যাডবেরি

অন্যান্য রেজিস্টারগুলিতে কিছু তথ্য যুক্ত করা হয়েছে (ইয়ঙ্কের সাথে বিরোধগুলি এড়ানোর উপায়) এবং কীভাবে আমরা ম্যাক্রো রেকর্ডিংয়ের সময় কার্সরহোল্ড সক্রিয় না হওয়ার সাথে "রেকর্ডিং" ধরতে সক্ষম হতে পারি তার একটি ইঙ্গিত। যদি আপনি এখনও এই নোটগুলি পরে লড়াই করে থাকেন তবে আমাকে জানতে দিন এবং আমি কাজ শেষ হওয়ার পরে এটি প্রয়োগ করার চেষ্টা করতে পারি। একটি নোট হিসাবে blackhole registerকেবলমাত্র একটি ইঙ্গিত এবং একটি আকর্ষণীয় ভিআইএম টিডবিট হিসাবে উল্লেখ করা হয়েছিল যা কিছু হতে পারে (ম্যাক্রো রেকর্ড করার সময় এটি ব্যবহার করা কার্যকর হবে না; যেমন @_ যেমন ব্যবহারযোগ্য নয়।) বাস্তবে আপনি ম্যাক্রো সংরক্ষণ করার চেষ্টাও করতে পারবেন না এটিতে ..
ড্যান ব্র্যাডবেরি

আমি এই গত রাতে কিছুটা সময় ব্যয় করেছি (বিয়ার কীবোর্ড স্ম্যাশিংয়ের পরে) এবং রেকর্ডিংটি কখন ঘটে থাকে এবং শেষ হয় ঠিক ঠিক তা নির্ণয় করা অবিশ্বাস্যরকম কঠিন বলে মনে হয়েছিল। আমার কুণ্ডলীটি বাস্তবে CursorHoldঘটে যাওয়া পিছিয়ে থাকার কারণে এটি একটি অসম্ভব স্বপ্ন বলে মনে হয়েছে CursorHold(এটি দেখার জন্য প্রতিটি সময় ঘটতে একটি সাধারণ গ্লোবাল ইনক্রিমেন্ট তৈরি করা হয়েছে)। এখনও এটি করার উপায় নিয়ে অবিশ্বাস্যভাবে আগ্রহী এবং আমাদের সমাধান না হওয়া পর্যন্ত কীগুলিটির বিরুদ্ধে আমার মুখটি ছিঁড়ে ফেলা অব্যাহত রাখবে ..
ড্যান ব্র্যাডবেরি

আমার মতে আপনার কাছে হাজার হাজার আলাদা বিকল্প নেই: আপনার আচরণের উপর qনজর রাখতে হবে এবং এটিকে একটি পরিবর্তনশীল টগল করতে হবে এবং রেকর্ডিং শুরু / বন্ধ করতে হবে। কোনও অটোম্যাকড কোনও মূল প্রেসে ট্রিগার না করায় এবং এখানে ভিমের একঘেয়েমি প্রকৃতির কারণে কোনও ভোটদানের অনুষ্ঠান করা সম্ভব নয় বলে এখানে একটি স্বতঃসংশোধন নির্ভরযোগ্য হতে পারে না। আপনার ভবিষ্যত পরীক্ষনগুলির সঙ্গে :-) সৌভাগ্য কামনা করছি
statox
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.