আমি কীভাবে কেবল ভিএম-এ আটকানো পাঠ্যটি পূর্বাবস্থায় ফেলি?


10

টি এল; ডিআর; সংস্করণ - আমি sertোকানোর মোডে যাবার পরে টাইপ করা অন্য পাঠ্যটি পূর্বাবস্থায় না ফেলে আমার ওএস অনুলিপি বাফার থেকে যে পাঠ্যটি আটকানো হয়েছিল তা কীভাবে পূর্বাবস্থা করব?

দীর্ঘ বিবরণ:

  1. আপনার ওএস অনুলিপি বাফারে কিছু রাখুন (উদাহরণস্বরূপ কিছু পাঠ্য হাইলাইট করুন এবং Command-cম্যাক করুন)
  2. ভিমে সন্নিবেশ মোডে যান ( i)
  3. কিছু টাইপ করুন (উদাঃ asdf)
  4. সন্নিবেশ মোড থেকে বেরিয়ে না এসে আপনার অনুলিপি বাফার থেকে ভিমে ( Command-vম্যাকের উপর) পেস্ট করুন
  5. হিট escape
  6. পেস্টটি পূর্বাবস্থায় ফেলার চেষ্টা করুন ( u)

আপনি সন্নিবেশ মোডে যাবার শেষ সময় থেকে এটি সবকিছুই বাতিল করে দেয়। অনওয়ার্ডগুলিতে, এটি asdfআমি এতে আটকানো সমস্ত পাঠ্যও যোগ করে।

কিভাবে আমি শুধু পাঠ্য আটকানো হয়েছে পূর্বাবস্থা? পেস্ট করা পাঠ্যটিকে পূর্বাবস্থায় ফেলার বিকল্প থাকতে আমি কী সর্বদা সন্নিবেশ মোডের বাইরে চলে যেতে এবং পাঠ্যটি আটকানোর আগে ফিরে যেতে পারি?

উত্তর:


4

একটি উপায় স্পষ্টভাবে পেস্টের আগে sertোকানো মোডে ফিরে এবং ফিরে। আপনি যদি পেস্ট আদেশগুলি প্রসারিত করেন তবে আপনি পেস্টের আগে স্বয়ংক্রিয়ভাবে একটি পূর্বাবস্থা সেট করতে পারেন :

" Any text fragment pasted in insert mode should be undone separately, without
" destroying what was typed before.
inoremap <C-R> <C-G>u<C-R>

উপরেরটি বিল্ট-ইন i_CTRL-Rকমান্ডের জন্য। আমি জানি না কিভাবে Command-vMacVim বাস্তবায়িত হয়, কিন্তু prepending <C-G>uকরার :imapকমান্ড একই প্রভাব অর্জন করা উচিত নয়।


1
একটি মোহন মত কাজ করে, ধন্যবাদ! আমার সম্ভবত যাইহোক পেস্ট করার জন্য স্ট্যান্ডার্ড ভিএম পদ্ধতিগুলি থাকা উচিত।
জাভিদ জামায়ে

কেবল এটি যুক্ত করুন: :h i_CTRL-G_u(যেমন, "পূর্বাবস্থায় ফেরা অনুক্রমটি, সন্নিবেশ মোডে নতুন পরিবর্তন শুরু করুন")।
toraritte

2

ম্যাকভিমে, Edit > Pasteশর্টকাটটি ওভাররাইড করার জন্য আপনাকে মেনু আইটেমটি আনম্যাপ করতে হবে , তারপরে আপনি D-vপ্রতিটি মোডে উপযুক্ত কমান্ডে সিএমডি-ভি ( ম্যাকভিম পার্লেন্সে) পুনরায় তৈরি করতে পারবেন। আমি এটি আমার সাথে যুক্ত করেছি ~/.gvimrcএবং এখন সবকিছু আশ্চর্যজনকভাবে কাজ করে:

macmenu Edit.Paste key=<nop>
noremap <D-v> "*P
cnoremap <D-v> <C-r><C-o>*
inoremap <D-v> <C-g>u<C-r><C-o>*

<C-g>uশুধুমাত্র সন্নিবেশ মোড পূর্বাবস্থা ইতিহাস ঠিক করার জন্য প্রয়োজনীয়; noremapএবং cnoremapকেবল স্বাভাবিক এবং কমান্ড মোড এ ডিফল্ট পেস্ট আচরণ পুনঃস্থাপন হয়।

এখানে সঠিক দিকে আমাকে নির্দেশ করার জন্য ইনগো কারকাতকে ধন্যবাদ।


1

আসলে সমাধানটি হ'ল আপনাকে Escপ্রথমে কমান্ড মোডে যেতে হবে (উদাহরণস্বরূপ ) প্রথমে inোকানো মোডে প্রবেশ করতে হবে, তবে এটি কেবলমাত্র আমি নিজে নিজে টাইপ করলেই কাজ করে তবে আমি এটি পরীক্ষা করে নিলে "এলোমেলোভাবে" কাজ করা বন্ধ মনে হয় ~/.vimrc। গুগল মোটেই সহায়তা করে না।

আমি এই সমস্যাটি সমাধানের জন্য প্রচুর সময় ব্যয় করেছি এবং আমি কেবল আমার ক্ষেত্রে কারণটি সনাক্ত করতে পারি:

টার্মিনাল বিদ্যমান পেস্ট কী দিয়ে পেস্ট কীটি ম্যাপ করবেন না

যেমন Ctrl+Shift+Vআমার কনসোল টার্মিনাল পেস্ট হবে, কিন্তু যদি আমি এই কী নির্ধারণ <C-S-v>মধ্যে ~/.vimrc, "একাধিক pastes এর পরিবর্তে শুধুমাত্র একক পেস্ট জন্য পূর্বাবস্থা" কাজ করা হবে না।

আমার ক্ষেত্রে, এর <C-v>পরিবর্তে আমাকে ব্যবহার করতে হবে <C-S-v>:

inoremap <C-v> <Esc>"+pi<Esc>i<Right><Right>

আপনার ক্ষেত্রে পার্থক্য হতে পারে, তবে বিষয়টি একই: বিদ্যমান টার্মিনাল এমুলেটর কী সহ একই পেস্ট কী বিবাদগুলি নির্ধারণ করবেন না।

আমি আমার টার্মিনাল পেস্ট কী সেট করে 100% এই উপসংহারটি প্রমাণ করেছি Ctrl+Vএবং এখন <C-v>কাজ করা কিন্তু <C-S-v>কাজ করা বন্ধ করে দিই ।

আরও খেয়াল করুন যে ভিমটি খুব সংবেদনশীল এবং অদ্ভুত। আমি বুঝতে পেরেছি iযে এটির সঠিক কার্সর অবস্থানে কাজ করতে আমাকে 2 টি ডান কীগুলি ম্যানুয়ালি ব্যবহার করতে হবে, তার মানে আমাকেও i2 টি রাইট কীগুলি লাগাতে ~/.vimrcহবে। আপনার ক্ষেত্রে পার্থক্য হতে পারে তবে পয়েন্টটি একই, আপনি কী ম্যানুয়ালি টাইপ করেন তার সাথে 100% মিল ~ / .vimrc এ কীগুলি + অর্ডার নিশ্চিত করুন।

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