বাশ ইতিহাসের কীবোর্ড শর্টকাট! *


8

বাশ-এ, শেষ কমান্ডের কিছু অংশ পুনরাবৃত্তি করতে কিছু হ্যান্ডি অপারেটর রয়েছে:

  • !^ পূর্ববর্তী কমান্ডের প্রথম যুক্তিতে প্রসারিত হয়, যেমন,

    $ echo one "two three"
    one two three
    $ echo !^
    echo one
    one
  • !$ পূর্ববর্তী কমান্ডের শেষ আর্গুমেন্টে প্রসারিত হয়, যেমন,

    $ echo one "two three"
    one two three
    $ echo !$
    echo "two three"
    two three
  • !* পূর্ববর্তী কমান্ডের সমস্ত আর্গুমেন্টে প্রসারিত হয়, যেমন,

    $ echo one "two three"
    one two three
    $ echo !*
    echo one "two three"
    one two three

(যতদূর আমি বুঝতে, এই জন্য অন্বিত চিনি আছে !!:^, !!:$এবং !!:*যথাক্রমে যেখানে !!একটি ঘটনা designator যে পূর্ববর্তী কমান্ড বিস্তৃতি, এবং ^, $এবং *শব্দ designators হয়, দেখতে ব্যাশ রেফারেন্স ম্যানুয়াল বা man bash।)

এগুলি প্রায়শই বেশ কার্যকর। এটি কীবোর্ড শর্টকাটগুলির সাথে আরও শীতল হয়ে যায়:

  • আপনি যখন Alt+ .বা Alt+ টিপুন _, পূর্ববর্তী কমান্ডের সর্বশেষ যুক্তিটি বর্তমান কমান্ডটিতে সন্নিবেশ করা হয়, একইভাবে আপনি !$সেই বিন্দুতে লিখেছিলেন ।

  • এছাড়া আঘাত করা সম্ভব Alt+ + Ctrl+ + y, পূর্ববর্তী কমান্ডের প্রথম আর্গুমেন্ট সন্নিবেশ করতে যেন আপনি লিখেছেন !^যে সময়ে।

( জিএনইউ রিডলাইন লাইব্রেরি দেখুন বা info readline।)

আমি বাশের ইতিহাস অপারেটরগুলির চেয়ে কীবোর্ড শর্টকাটগুলিকে প্রাধান্য দিই কারণ আমি কমান্ডটি বাস্তবায়ন করার আগে আমি কী লিখছি তা দেখতে পাচ্ছি। যাইহোক, এমন একটি শর্টকাট বলে মনে হচ্ছে না যা আমাকে পূর্ববর্তী কমান্ডের সমস্ত শব্দ .োকাতে সক্ষম করে, যেমন একটি কাজ যা !*কাজ করে। কমপক্ষে আমি এটি খুঁজে পেলাম না।

এমন শর্টকাট আছে? যদি তা না হয় তবে একটি যুক্ত করার জন্য পঠন পাঠাগারটি কনফিগার করা সম্ভব এবং কীভাবে?


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

1
ইন zsh, আপনি টাইপ করুন echo !*এবং তারপরে ট্যাব টিপুন, আপনার পছন্দসই প্রভাব রয়েছে। সাধারণভাবে, পাঠ্যপুস্তক থাকাকালীন ট্যাব সমস্ত প্রসারণযোগ্য প্রসারিত করবে। খুব সহজ; সম্ভবত বাশ একই প্রভাব কিছু কনফিগারেশন আছে? @ শেঠ, আমি মনে করি এটি বাশের পাঠ্যলাইন, টার্মিনাল এমুলেটর নয় - তবে নিশ্চিত নয়।
রোমানো

2
@ শেঠ নো, কিউ থেকে শর্টকাটগুলি বাশ দ্বারা পরিচালিত হয়। আপনার জন্য Serch করতে 'ইতিহাস সাধিত কমান্ড' মধ্যে man bash(লাইন 3030 এ কোথাও)
Radu Rădeanu

@ রাদুরাদেনু ওহ আকর্ষণীয়! আমি এটা জানতাম না। খারাপ অনুমানের জন্য আমার খারাপ।
শেঠ

1
\e.এবং \e_রিডলাইন ফাংশনে ম্যাপ করা হয় yank-last-argএবং এতে \e\C-yম্যাপ করা হয় yank-nth-arg। দুঃখজনকভাবে এমন কোনও (একক) কমান্ড নেই যা একবারে একাধিক পূর্ববর্তী যুক্তি যুক্ত করে।
অ্যাডাইফোন

উত্তর:


5

আপনি যদি নিম্নলিখিত কমান্ডের আউটপুটটি দেখেন:

bind -l

বা আরও ভাল:

bind -l | grep arg

আপনি দেখতে পাচ্ছেন যে সমস্ত আর্গুমেন্টের জন্য কোনও রিডলাইন ফাংশন বিদ্যমান নেই, উদাহরণস্বরূপ, yank-last-argশেষ যুক্তির জন্য - যা পূর্ববর্তী কমান্ডটিতে সর্বশেষ যুক্তি সন্নিবেশ করতে পারে (পূর্ববর্তী ইতিহাসের প্রবেশের শেষ শব্দ)। সুতরাং, যদি এই জাতীয় ফাংশনটি না উপস্থিত থাকে তবে সম্ভবত আপনি যা চান তা সম্পাদন করার জন্য একটি শর্টকাট উপস্থিত নেই exist

আসুন আপনার অনুরোধের কাছে আসা কোনওটিকে ক্রেট করার চেষ্টা করুন ...

প্রথমে নীচের কমান্ডের ফলাফল দেখুন:

bind -p | grep yank-nth-arg

আউটপুটটি হ'ল:

"\e\C-y": yank-nth-arg

আর যখন ফলো অনুবাদ করা যায় yank-nth-arg- আবদ্ধ হয় (একটি যুক্তি এন পূর্ববর্তী হুকুম থেকে n তম যুক্তি সন্নিবেশ সঙ্গে যা পূর্ববর্তী কমান্ড প্রথম আর্গুমেন্ট সন্নিবেশ) Alt+ + Ctrl+ + y

bind -pকমান্ডের আউটপুট থেকে যে কোনও লাইনকে একইভাবে ব্যাখ্যা করা যেতে পারে ।

এখন নিম্নলিখিত পরিস্থিতিতে মনোযোগ দিন:

  • আপনি যদি নিম্নলিখিত বাঁধাই সেট করেন:

    bind '"\ea": "\e2\e."'

    Alt+ + Aম্যাপ করা হবে Alt+ + 2Alt+ + .যা পূর্ববর্তী কমান্ডের দ্বিতীয় যুক্তি সন্নিবেশ করতে ম্যাপ করা হয়েছে। সুতরাং, যখন আপনি টিপুন পর Alt+ + A, দ্বিতীয় পূর্ববর্তী কমান্ডের যুক্তি বর্তমান কমান্ডে ঢোকানো হয়।

  • যদি আপনি সেট করেন:

    bind '"\ea": "\e1\e. \e2\e."'

    আপনি যখন Alt+ টিপুন A, তার পরে পূর্ববর্তী কমান্ডের প্রথম দুটি আর্গুমেন্ট বর্তমান কমান্ডে .োকানো হবে। পূর্ববর্তী কমান্ড থেকে আর্গুমেন্টের সংখ্যা যদি সর্বোচ্চ 2 হয় তবে অবশ্যই পূর্ববর্তী সমস্ত কমান্ড বর্তমান কমান্ডটিতে সন্নিবেশ করা হয়।

  • যদি আপনি সেট করেন:

    bind '"\ea": "\e1\e. \e2\e. \e3\e."'

    আপনি যখন Alt+ টিপুন A, তার পরে পূর্ববর্তী কমান্ডের প্রথম তিনটি আর্গুমেন্ট বর্তমান কমান্ডে .োকানো হবে। পূর্ববর্তী কমান্ড থেকে আর্গুমেন্টের সংখ্যাটি যদি সর্বোচ্চ 3 (আপনার ক্ষেত্রে হিসাবে) হয় তবে অবশ্যই পূর্ববর্তী সমস্ত কমান্ড বর্তমান কমান্ডটিতে সন্নিবেশ করা হয়েছে।

  • ইত্যাদি।

প্রথম 10 টি আর্গুমেন্টের জন্য, আপনি ব্যবহার করতে পারেন:

bind '"\ea": "\e1\e. \e2\e. \e3\e. \e4\e. \e5\e. \e6\e. \e7\e. \e8\e. \e9\e. \e1\e0\e."'

এবং আমি মনে করি যে এটি এতক্ষণ যথেষ্ট যথেষ্ট যতক্ষণ আমি এতগুলি যুক্তি দিয়ে খুব বেশি কমান্ড ব্যবহার করি না।

এটি অবিচল করতে আপনার ~/.inputrcফাইলটিতে নিম্নলিখিত লাইন লাইনটি যুক্ত করুন:

"\ea": "\e1\e. \e2\e. \e3\e. \e4\e. \e5\e. \e6\e. \e7\e. \e8\e. \e9\e. \e1\e0\e."

এই উদাহরণে আমি পছন্দ Alt+ + Aসব আর্গুমেন্ট সন্নিবেশ করতে পূর্ববর্তী কমান্ডের (যদি আর্গুমেন্ট 10 নম্বর থেকে বড় নয়), কিন্তু আপনি আগের কমান্ডে প্রতিস্থাপন সঙ্গে অন্য কোন সমন্বয় আপনি বেছে করতে \eaপংক্তি।

সম্পদ:


ঠিক আছে, এটি কিছুটা হ্যাকিশ, এবং এটি কেবলমাত্র সীমিত সংখ্যক তর্কগুলির জন্য কাজ করবে, তবে এটি সহজেই আমরা পেতে পারি এটি সবচেয়ে কাছের বলে মনে হচ্ছে - আমি এটি গ্রহণ করব;) আসলে আমি কেবল পঠনরেখার উত্স কোডটি দেখেছি। প্রথম নজরে এটি ফাইলের মতো দেখায় funmap.c, ফাংশনটি yank-nth-argসি ফাংশনে ম্যাপ করা হয় rl_yank_nth_arg, যা পরিবর্তিতভাবে সংজ্ঞায়িত হয় kill.c। অ্যানালগালিভাবে জন্য yank-last-arg। অবশ্যই এই জাতীয় কার্যকারিতা সহ পাঠ্যরেখা প্রসারিত করা সম্ভব হবে, তবে আমি এটি করতে চাই না; আমি পছন্দ আমার readline দ্বারা পরিচালিত করা apt, এবং এই বৈশিষ্ট্য না যে ); গুরুত্বপূর্ণ
Malte Skoruppa
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.