শেষ শব্দটি মুছুন (Ctrl-W): বাশ শেলটি ভিআইএম কমান্ড লাইনের মতো আচরণ করুন


6

ব্যাশ শেলটিতে প্রচুর দরকারী কীবোর্ড শর্টকাটগুলির মধ্যে রয়েছে Ctrl- Wকার্সারের বাম দিকে শব্দটি মুছতে। ধরা যাক আমার কমান্ড লাইনটি নীচের মত দেখাচ্ছে:

cp some-file /foo/bar/baz/copy

এখন আমি টিপতে সক্ষম হবেন Ctrl- Wএবং নিম্নলিখিতগুলি দিয়ে শেষ করব:

cp some-file /foo/bar/baz/

ভিমের কমান্ড লাইনে এটি আসলে এইভাবে কাজ করে: কেবলমাত্র বর্ণমালা অক্ষরগুলিকেই "শব্দ" হিসাবে বিবেচনা করা হয়, যেখানে বিশেষ অক্ষর (যেমন /) একটি নতুন "শব্দের" শুরুর চিহ্ন চিহ্নিতকারী হিসাবে ডিলিমিটার হিসাবে কাজ করে।

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

cp some-file

বাশকে ভিমের মতো আচরণ করার কোনও উপায় আছে কি? কিছু কনফিগারেশন আমি আমার মধ্যে রাখতে পারি .bashrc?


1
এই প্রশ্নটি দেখুন এবং এই উত্তরের দিকে মনোযোগ দিন । কিছু কারণে এটি উত্সাহিত করা হয়নি তবে এটি আপনি যা চান ঠিক তা করে।
taketwo

উত্তর:


11

ভিমের সাথে এর কোনও যোগসূত্র নেই, সমস্ত সম্পাদকরা সেভাবে আচরণ করে (ইমাস সহ), তারা শব্দহীন অক্ষরগুলিকে সীমানা হিসাবে বিবেচনা করে। যাইহোক, আপনি যে আচরণের কথা বলছেন সেটি নিয়ন্ত্রণ দ্বারা নিয়ন্ত্রিত হয় readlineএবং এর ম্যানুয়ালটি বেশ কয়েকটি আদেশ দেয় যা আপনি শর্টকাট বরাদ্দ করতে পারেন। আমি এখানে কয়েকটি প্রাসঙ্গিক পেস্ট করছি তবে আমি আপনাকে man readlineআরও তথ্যের জন্য পড়ার পরামর্শ দিচ্ছি :

   backward-word (M-b)
          Move  back  to  the  start  of the current or previous word.  Words 
          are composed of alphanumeric characters (letters and digits).

   kill-line (C-k)
          Kill the text from point to the end of the line.
   kill-word (M-d)
          Kill from point the end of  the  current  word,  or  if  between
          words,  to  the  end  of the next word.  Word boundaries are the
          same as those used by forward-word.
   backward-kill-word (M-Rubout)
          Kill the word behind point.  Word boundaries  are  the  same  as
          those used by backward-word.
   unix-word-rubout (C-w)
          Kill  the  word behind point, using white space as a word bound
          ary.  The killed text is saved on the kill-ring.
   unix-filename-rubout
          Kill the word behind point, using  white  space  and  the  slash
          character  as  the word boundaries.  The killed text is saved on
          the kill-ring.

সুতরাং, আপনি backward-kill-wordযেটি চান তা হ'ল শব্দ বর্ণের সীমানা হিসাবে অক্ষরহীন অক্ষর ব্যবহার করে। ডিফল্টরূপে, এটি Alt+ এ নিয়োগ করা হয়েছে Backspaceতবে আপনি /etc/inputrcযদি সেগুলি সমস্ত ব্যবহারকারীর কাছে প্রয়োগ করতে চান বা (আরও ভাল) আপনার নিজের স্থানীয় ব্যবহার করতে চান তবে আপনি গ্লোবালটি ব্যবহার করে এটি পরিবর্তন করতে পারেন $HOME/.inputrc

যতদুর আমি বলতে পারেন, Ctrl+ + Wসংরক্ষিত হবে বলে মনে হয় এবং আপনি ব্যবহার করতে পারবেন না যে এক কিন্তু আপনি অন্য একটি শর্টকাট নির্বাচন করতে পারবেন Ctrl+ + Jউদাহরণস্বরূপ। কোনও $HOME/.inputrcফাইল উপস্থিত না থাকলে এটি তৈরি করুন এবং এতে এই লাইনটি যুক্ত করুন:

Control-J: backward-kill-word 

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

C-J: backward-kill-word 

খুব পুরো ব্যাখ্যা, ধন্যবাদ! শেষ পর্যন্ত, আমি এই পদ্ধতির ব্যবহার করতে বেছে নিয়েছি।
প্রাণঘাতী-গিটার

5
\C-wসংরক্ষিত নেই কেবলমাত্র সেটিংটি bind 'set bind-tty-special-chars off'বন্ধ করতে bind-tty-special-charsদৌড়ুন যার ফলে রিডলাইনটি টার্মিনালের বিশেষ অক্ষরগুলি (এই ক্ষেত্রে weraseচরিত্রটি) পুনরায় পড়তে এবং পুনরায় যুক্ত করতে পারে যখনই একটি নতুন লাইন ইনপুট হতে হবে।
জেডিবিপি

@ জেডিবিপি আহ, ঠিক আছে, ধন্যবাদ আমি কেবল দেখেছি যে এটি manপৃষ্ঠাতে সুস্পষ্টভাবে উল্লেখ করা হয়েছে এবং আমি আমার সেটিংসটি ওভাররাইট করতে পারি না .inputrc
টেরডন

দয়া করে নোট করুন: পশ্চাদপদ-হত্যা-শব্দটি ভিএম-এর মতো কাজ করে না ... foo / বার 3 সেন্ট্রাল + ডাব্লু, যেমন foo / বার -> foo / -> foo -> মুছে ফেলা হবে, যেখানে শেলের মধ্যে রয়েছে, foo / বার ->
ফু

5

আপনি নীচের লাইনগুলি প্রবেশ করে ~/.inputrcএবং একটি নতুন শেল শুরু করে পঠনখণ্ডার (এবং এইভাবে বাশের) তথাকথিত "vi মোড" সক্ষম করতে পারবেন :

set editing-mode vi
set keymap vi-command

তবে আপনি লক্ষ্য করবেন যে <C-w>ডিফল্ট ইমাস মোডের মতো একই কাজ করে: শব্দগুলি স্পেস-সীমাবদ্ধ। আপনি করতে পারেন dT/বা অনুরূপ কমান্ড, যদিও। এটি এখনও একটি অনুকরণ, আসল চুক্তি নয়। উপলভ্য ম্যাপিংগুলি রিডলাইনের ম্যানুয়ালটিতে তালিকাবদ্ধ রয়েছে:

$ man readline
/VI

ভিম উইকিতে এই পৃষ্ঠাটি দেখুন ।

তবে আমি মনে করি না যে রিডলাইনটির ভিআই মোডটি এটি দরকারী এটি যদি আপনি প্রায়শই নিজের কমান্ড লাইনকে গুরুত্ব সহকারে সম্পাদনার প্রয়োজন বোধ করেন… তবে কেন ভিমকে বাস্তবের জন্য ব্যবহার করবেন না ?

<C-x><C-e>

বাহ আমার সম্পাদকের কাছে প্রার্থনা করতে শেষ শর্টকাটটি দুর্দান্ত! যদিও আমার কমান্ড লাইন জটিলতার সেই স্তরে পৌঁছেছে, আমি বরং এটি শেল স্ক্রিপ্টে আটকে দেব। তবুও, জেনে রাখা ভাল!
প্রাণঘাতী-গিটার

1

আমি জানি যে দুটি বিকল্প আছে, যদিও আপনি যা চান সরাসরি তা করেন না।

  1. ভিআই মোড ব্যবহার করতে বাশ সেট করুন, যেখানে প্রম্পটটি তখন vi এর লাইনের মতো আচরণ করে। কমান্ডটি হ'ল set -o vi। রেফ: বাশ সহায়তা - একটি বাশ টিউটোরিয়াল
  2. আপনার বর্তমান শেল প্রম্পটে vi কী মানচিত্র যুক্ত করুন। রেফারেন্স: স্ট্যাকওভারফ্লো: কী মানচিত্রের vi কী করে?
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.