আমি সবেমাত্র টাইপ করা প্রিফিক্স সহ একটি পূর্ববর্তী কমান্ড সন্ধান করুন


67

কমান্ডের ইতিহাসে নেভিগেট করতে আমরা উপরে এবং ডাউন তীর ব্যবহার করতে পারি।

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

শেল টার্মিনালে অনুরূপ ফাংশন অর্জন করার কোনও উপায় আছে কি? এবং টার্মিনাল ব্যবহারের দক্ষতা উন্নয়নের জন্য অন্য কোনও টিপস?


আপনি কেবল একটি শেল যে মত, এই ধরনের একটি বৈশিষ্ট্য প্রদান করে ব্যবহার করতে পারে fish);
yoann

@ অ্যায়ান আপনি ধরে নিচ্ছেন বাশ দেয় না। এটি রিডলাইনের মাধ্যমে করে, কেবলমাত্র ডিফল্টরূপে অ্যাক্সেসযোগ্য নয়।
মারু

@ মুরু আমি ব্যাশ-এর ​​সিটিআরএল + আর সম্পর্কে অবগত রয়েছি, এবং এমমন্টের উত্তরটি পৃষ্ঠা আপ / পৃষ্ঠা ডাউন সহ এটি করার একটি পরিষ্কার উপায় সরবরাহ করে। তীর কীগুলি দিয়ে কী করার কোনও উপায় আছে?
yoan

1
@yoann পরীক্ষা করুন unix.stackexchange.com/a/76591/70524 । পরিবর্তে \e[5~এবং \e[6~ব্যবহার, , ।\e[A \e[B
মুরু

উত্তর:


95

আপনি যা খুঁজছেন তা হ'ল CtrlR

টাইপ করুন CtrlRএবং তারপরে আপনি যে কমান্ডটি চান তার অংশটি টাইপ করুন। বাশ প্রথম মিলিত কমান্ড প্রদর্শন করবে। টাইপিং চালিয়ে যান CtrlRএবং বাশ পূর্ববর্তী ম্যাচিং কমান্ডগুলির মধ্য দিয়ে ঘুরে বেড়াবে।

ইতিহাসে পিছনের দিকে অনুসন্ধান করতে, CtrlSপরিবর্তে টাইপ করুন। (যদি CtrlSআপনার পক্ষে সেভাবে কাজ না করে, তবে এর অর্থ সম্ভবত আপনার XON / XOFF প্রবাহ নিয়ন্ত্রণ অক্ষম করতে হবে: এটি করার জন্য, চালান stty -ixon))

এটি "অনুসন্ধান" এর অধীনে নথিভুক্ত করা হয়েছে man bash


1
Ctrl-Qহিমশীতল অবস্থা ছেড়ে দেওয়ার জন্য, যদি আপনি ইতিমধ্যে Ctrl-Sপ্রথমে প্রবাহ নিয়ন্ত্রণ বন্ধ না করে আঘাত করেন এবং আপনার টার্মিনাল হিমশীতল হয়ে যান।
হংকবোঝু

26

এগুলি আপনার মধ্যে রাখুন ~/.inputrc:

"\e[5~": history-search-backward
"\e[6~": history-search-forward

এগুলি আপনার ইচ্ছা অনুসারে তৈরি Page Upএবং Page Downআচরণ করে। (কিছু বিতরণ এটি ইতিমধ্যে এটি আপনার জন্য কনফিগার করেছে)) আমি ব্যক্তিগতভাবে এই উপায়টিকে Ctrl+ Rবা এর চেয়ে বেশি সুবিধাজনক বলে মনে করি history


এটি সমস্ত বর্তমান উত্তরের মধ্যে সবচেয়ে সুবিধাজনক উপায়। আপনি কি কাজ করার পদ্ধতি সম্পর্কে একটু ব্যাখ্যা দিতে পারবেন?
লি

3
~/.inputrcবা /etc/inputrcপরিবেশের পরিবর্তনশীল দ্বারা $INPUTRCরেফার করা ফাইল হ'ল বাশ (আপনার শেল) সহ রিডলাইন ব্যবহার করে সমস্ত অ্যাপ্লিকেশনটির লাইন সম্পাদনা কনফিগারেশন ফাইল। এটিতে এই দুটি সহ কয়েকটি অন্তর্নির্মিত লাইন সম্পাদনা ক্ষমতা রয়েছে: বাশের ম্যানুয়াল পৃষ্ঠায় আরও কীওয়ার্ডগুলির জন্য এটি অনুসন্ধান করুন for \e[5~/ \e[6~বেশিরভাগ টার্মিনাল এমুলেটরগুলিতে পৃষ্ঠা আপ / ডাউন কী দ্বারা উত্পাদিত সিকোয়েন্সগুলি; এটি দেখতে, catকমান্ডটি আরম্ভ করুন এবং তারপরে এই কীগুলি টিপুন (এস্কেপ বাইট টার্মিনালে যেমন ^[ইনপুটসিটিতে প্রদর্শিত হবে \e)।
egmont

আপনার মূল প্রশ্নের উদাহরণটিতে বলা হয়েছে যে উপর / ডাউন কীগুলি মতলবতে এইভাবে কাজ করে। আপনি যদি উপর এবং নীচের ক্রমটি ইনপুটসিটিতে রাখেন এবং এই ক্রিয়াটি অর্পণ করেন তবে কী ঘটেছিল তা দেখতে আকর্ষণীয় হবে; এটি কি সঠিকভাবে কাজ করবে, বা তাদের পূর্বনির্ধারিত আচরণের সাথে সাংঘর্ষিক হওয়ার কারণে বাজে পার্শ্ব প্রতিক্রিয়া হবে। আমি জানি না, আপনি যদি এই নিয়ে পরীক্ষা করেন তবে আমি আপনার অনুসন্ধানগুলি শুনে খুশি হব।
egmont

আমি যখন echo $INPUTRCএটি খালি। আমি উবুন্টু 14.04
জর্জিএফজি

2
এটি করার জন্য আমি ব্যক্তিগতভাবে উপরে এবং নীচে তীরটি অগ্রাহ্য করতে পছন্দ করি: "\e[A": history-search-backwardএবং"\e[B": history-search-forward
23

9

I r / ^ এর ইতিহাস আই-অনুসন্ধান ছাড়াও:

alt.কার্সারে পূর্ববর্তী কমান্ডের শেষ "শব্দ" সন্নিবেশ করানো হয়। পুরানো কমান্ডগুলি থেকে শেষ শব্দটি পেতে এটি পুনরাবৃত্তি করুন। (তবে মনে রাখবেন যে একটি পশ্চাদপসরণ &ব্যাকগ্রাউন্ড কমান্ডের শেষ শব্দ হিসাবে গণনা করা হয়েছে)।

এই জন্য সুপার সুবিধাজনক mkdir foo, cdAlt-ডট। আপ-তীরের চেয়েও দ্রুত, ^ a, alt-d (সামনের শব্দটি মুছুন) cd,।

২ য় থেকে শেষের শব্দটি পেতে ব্যবহার করুন esc - 2 alt+.(অর্থাত্ ইম্যাকস-স্টাইলের সংখ্যাসূচক যুক্তিটি ব্যবহার করুন .ণাত্মক গণনাটি alt+.শেষ থেকে শুরু করে ইতিবাচক গণনা শুরু থেকে এগিয়ে যায়)) তবে এটি সাধারণত এটির মূল্য থেকে বেশি সমস্যা হয়; কিছু সময়ে এটি মাউস এবং অনুলিপি / পেস্ট, বা আপ-তীর এবং এর ^ w / ^ y অংশে পৌঁছানোর পক্ষে দ্রুত (নীচে দেখুন)।


যদি আপনার টার্মিনালটি সুন্দরভাবে / সঠিকভাবে সেট আপ করা থাকে তবে সিটিআরএল-বাম এবং সিআরটিএল-ডানগুলি শব্দ দিয়ে পিছনে / এগিয়ে যাবে / যদি তা না হয় তবে আশা করি কমপক্ষে alt-b এবং alt-f একই কাজ করবে।


ctrl- / একটি পূর্বাবস্থায় ফিরে আসে। আপনি শব্দটি মুছে ফেলার জন্য অটো-রিপিট ব্যবহার করতে পারেন আরও দক্ষতার সাথে যদি আপনি কিছুক্ষণের মধ্যে ওভারশুট করার সময় পূর্বাবস্থায় ফিরে আসতে পারেন।


কমান্ড-রিং ব্যবহার করে আরও শক্তিশালী মিক্সিং / কমান্ডের মিল পাওয়া যায় যা ইমাসের মতো কাজ করে। ctrl-y শেষ ctrl-w / ctrl-u / ctrl-backspace / Alt-d পেস্ট করতে। পুরানো নিহত পাঠ্যের মাধ্যমে চক্রের জন্য Alt-y।

একাধিক সিআরটিএল-ডাব্লু বা সারিবদ্ধ যা কিছু কিল-রিং এন্ট্রি করে। আপনি দুটি জিনিস অপসারণ করতে চান এবং কেবল একটি পরে পেস্ট করতে চান তবে বাম এবং ডান তীর বা এন্ট্রিটি ব্রেক করার জন্য কিছু ব্যবহার করুন।

এই সমস্ত একত্রিত, আপনি পারেন

  • একটি কমান্ড টাইপ করা শুরু করুন
  • একটি পুরানো কমান্ডে ফিরে যেতে এবং নিয়ন্ত্রণ-ডাব্লু বা অনুরূপ সহ এর অংশটি দখল করতে ctrl-r।
  • এসএস-আর বা alt+rএটির পুনরুদ্ধার করার আগে আপনি এর কিছু অংশ মোছার আগে এটি কেমন ছিল।
  • Alt- >আপনি ইতিহাসের শেষ দিকে (অর্থাত্ ডাউন-তীরটি সমস্ত পথে) যেতে, আপনি যে কমান্ডটির মাঝখানে ছিলেন ফিরে পেতে।

অন্যান্য ইন্টারেক্টিভ-ব্যবহারের টিপস:

সক্ষম করুন shopt -s globstar, যাতে আপনি **/*.c(বর্তমান দির সহ পুনরাবৃত্তি) করতে পারেন। কখনও কখনও ইন্টারেক্টিভ ব্যবহারের জন্য সহজ, তবে সাধারণত find -name '*.c' -exec foo {} +এটি আরও ভাল।

আপনি যদি বাশ স্ক্রিপ্টগুলি লিখেন তবে shopt -s extglobআপনার ইন্টারেক্টিভ শেলগুলিতেও এটি সক্ষম করা সহজ হবে। আপনি কখনও কখনও স্টাফের মতো *.!(c|h)ফাইলগুলির সাথে মেলে এমন ব্যবহারের সন্ধান পাবেন যা .c বা .h দিয়ে শেষ হয় না।

আপনার জন্য পছন্দ alias লেখা খুঁজুন ls -l, less, এবং অন্য কিছু আপনি অনেক কাজ। ( cp -i,, mv -iএবং দুর্দান্ত rm -I। একটি নির্বাচনী আরএম করার জন্য তাদের উপর নির্ভর করে অভ্যাসে উঠবেন না G জিএনইউ আরএম এর -আমি সমস্ত বার্তা জিজ্ঞাসা করি asks)

আমি পছন্দ করি alias m=less("আরও" এর জন্য এম)। আমি পূর্ববর্তী / পরবর্তী ফাইল ( ) এর lessসাথে সেট আপ করেছি ,এবং .আবদ্ধ করেছি lesskey। ডিফল্টটি একটি মাল্টি-কিপ্রেস ক্রম যা অটোরিপেটের সাথে ব্যবহার করা যায় না।


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

অন্য শেলের মতো একই সিডব্লিউডের সাথে একটি নতুন শেল খোলার কার্যকারিতার মতো কিছু পেতে, আমি সিডি / পুশ / পপডির জন্য একটি কাস্টম হুক ব্যবহার করি cds 8যা স্ক্রিন উইন্ডো 8-এ আমার শেলটি যেভাবে ডায়র ব্যবহার করছে তা সিডি করতে দেয় । এটি পর্দার সেশনের বাইরে শেলগুলির জন্যও কাজ করে, যতক্ষণ না কেবলমাত্র একটি পর্দার সেশন থাকে।


খনিটি "সঠিকভাবে কনফিগার করা" বলে মনে হচ্ছে না। আমি এখানে দেখি প্রচুর শর্টকাট কাজ করে না, আমি উবুন্টু 14.04 থেকে স্টক টার্মিনালটি ব্যবহার করছি। আমি কীভাবে এটি কনফিগার করতে পারি?
জর্জিএফজি

@ জর্জিএফজি: আমি মনে করি যে কেডিটি gnome-terminalস্যুইচ করার আগে উবুন্টু ১৪.০৪-তে বক্সের বাইরে এটি আমার পক্ষে কাজ করেছিল। প্রাসঙ্গিক বিকল্পটি আপনার টার্মিনাল সেটিংসে, এসএস-উপসর্গ বনাম উচ্চ-বিট এবং সম্ভবত কিছু অন্যান্য সেটিংসে রয়েছে। তাদের মধ্যে কিছু এসএসএসের মাধ্যমে আমার পক্ষে পুরোপুরি কাজ করে না। (উদাহরণস্বরূপ, সিআরটিএলটি বাম / ডান তীর কীটির জন্য এস্কেপ-কোডটি বন্ধ করে দিন এবং আমি 5Dআক্ষরিক অর্থে হাজির হব )
পিটার কর্ডেস

7

আপনার নীচের লাইন যুক্ত করুন ~/.inputrc

"\e[A": history-search-backward
"\e[B": history-search-forward

এটি এমমন্টের উত্তরের মতো, তবে পেজ আপ এবং পৃষ্ঠা ডাউন ব্যবহারের পরিবর্তে এটি তীর আপ এবং অ্যারো ডাউনের জন্য এস্কেপ সিকোয়েন্সগুলি ব্যবহার করে। এই উপায়ে ম্যাকে ব্যবহার করা অনেক বেশি সুবিধাজনক।


4

আমি সবসময় আমার মেশিনগুলিকে একটি বড় HISSIZE মান সহ কনফিগার করে থাকি যাতে এটি দীর্ঘ ইতিহাসের তালিকা রাখে, পাশাপাশি সময় স্ট্যাম্পের মান সহ হিস্টটাইমফর্ম্যাট যাতে আমি দেখতে পারি যে কমান্ডটি কখন চালিত হয়েছিল can

export HISTSIZE=10000
export HISTTIMEFORMAT="%m/%d/%Y %T "

3

আমি সাধারণত যে উপায়টি ব্যবহার করি তা হ'ল historyকমান্ডটি একত্রিত করাgrep

অর্থাৎ,

history | grep <command im looking for>

এটি আপনার দ্বারা টাইপ করা কমান্ডগুলির একটি সংখ্যাযুক্ত ইতিহাস প্রদর্শন করবে যা সেই আদেশটি ধারণ করে, আপনি এটির পরে ব্যবহার করতে পারেন:

!<number listed in history command>

সেই আদেশটি পুনরায় করতে to

অর্থাৎ,

history | grep history

142  history
143  history | grep lvresize
568  history | grep echo
570  history | grep echo
571  history | grep history

অনুসরণ করেছে: !571

পুনরাবৃত্তি হবে history | grep history


1
সিআর = আরও ভাল + আরও নিরাপদ
PSkocik

1
সম্ভবত, ব্যক্তিগতভাবে আমি বেশিরভাগ কমান্ড সন্ধানের দ্রুততম মাধ্যম হিসাবে গ্রেপ-এ পাইপযুক্ত একটি ইতিহাস পাই। যতদূর নিরাপদ, আমি নিশ্চিত না আপনি কী বোঝাতে চেয়েছেন, সিআর দিয়ে অনুসন্ধান করার জন্য ইতিহাস ব্যবহারের অন্তর্নিহিত ঝুঁকিগুলি কী?
গ্রেভি

2
@ গ্রেভী আমার সন্দেহ হয় পিএসকোকিক মানে !ইতিহাসের প্রতিস্থাপনটি কম নিরাপদ।
ডারোবার্ট

3
@ গ্রাভি সহজাত ঝুঁকিগুলি ঘটনাক্রমে ভুল লাইন পাবে। আপনার টার্মিনাল হিমায়িত হয়ে গেছে কেন না আপনি যদি কন্ট্রোল-এস ব্যবহার না করেন এবং আপনি xon / xoff ফ্লো নিয়ন্ত্রণ সক্ষম করে থাকেন (প্রায়শই ডিফল্ট থাকে)। যদি তা হয় তবে কন্ট্রোল-কিউ এটিকে ফিরিয়ে আনবে।
ডারোবার্ট

1
আমি @ এসএসসিওসিকের সাথে একমত, cr আরও ভাল কারণ ইতিহাসের লাইনটি সম্পাদন করা আরও সহজ rather জটিল একই-কমান্ডটি আবার চালানো আপনি জটিল ওয়ান-লাইনারগুলিতে পুনরায় টাইপ করার সময় বা লম্বা পথে একটি পৃথক ফাইল ট্যাব-সম্পূর্ণ করার জন্য কী করতে পারেন তার একটি তুচ্ছ ঘটনা। আমার উত্তর দেখুন।
পিটার কর্ডস

1

আমি আমার ব্যাশ টার্মিনালে প্রতিদিন 4 টি টিপস (এবং কিছু অন্যান্য) ব্যবহার করেছি:

  • শেষ আদেশটি কার্যকর করুন: !!

  • ইতিহাস থেকে কমান্ড এন কার্যকর করুন : !N

  • ইতিহাস থেকে উপসর্গ দিয়ে শুরু করা শেষ কমান্ডটি মুদ্রণ করুন : !prefix:p

  • ইতিহাস থেকে উপসর্গ দিয়ে শুরু করা শেষ আদেশটি কার্যকর করুন : !prefix


1

যদি আপনার zshপরিবর্তে আপনার ব্যবহার করা ঠিক হয় তবে bashকনা তার জন্য ওহ-মাই- জেডএস ব্যবহার করুন ।

এটিতে আপনার কমান্ডের ইতিহাসের মাধ্যমে নীচে নেভিগেশন তীর রয়েছে। আপনি ইতিমধ্যে পাঠ্য টাইপ করলে (ম্যাথল্যাব হিসাবে) এটি একই ন্যাভিগেশনকেও অনুমতি দেয়।

সম্পাদনা করুন: এটিতে অন্যান্য বিকাশকারী-কেন্দ্রিক স্টাফ যেমন অ্যালিয়াস এবং থিমগুলি রয়েছে। এই অতিরিক্তগুলি ডিস্ট্রোটিকে আরও বড় এবং আরও জটিল করে তোলে।

https://github.com/robbyrussell/oh-my-zsh


1
oh-my-zshটন স্টাফ রয়েছে। আপনি পাশাপাশি বলতে পারেন: এই সঠিক বৈশিষ্ট্যটি সেই ডিস্ট্রোতে অন্তর্ভুক্ত রয়েছে, যখন আপনার প্রয়োজন সমস্ত একটি নির্দিষ্ট সেটিংস বা অ্যাপ্লিকেশন।
মুরু

আমি পোস্টটি সম্পাদনা করেছি: আমি সতর্ক করে দিয়েছিলাম যে এটি একটি সাধারণ অ্যাপ্লিকেশনটির চেয়ে বড়।
ব্যবহারকারী9869932

1

নিম্নলিখিত উপন্যাসটি ~ / .bashrc এ যুক্ত করুন

alias h='history | awk '"'"'{$1="";print}'"'"' |sed "s/^ *//" |grep -v "^h " | sort | uniq | grep'

ব্যবহার: h fireআমাকে কমান্ডগুলির একটি তালিকাতে আগুন রয়েছে । অথবা h ^fireআমাকে কমান্ডগুলির একটি তালিকা আগুন দিয়ে শুরু করবে ।

এটি কার্যকর যখন আমি একই সাথে কমান্ডের একটি সিরিজ দেখতে চাই।

যাইহোক, '"'"'কুৎসিত তবে আমি একক উদ্ধৃতিতে একক উদ্ধৃতি এড়ানোর অন্যান্য উপায় খুঁজে পেলাম না।


fyi - h="history | awk '{\$1=\"\"; print}'কাজ করা উচিত। বিকল্পভাবে একটি ফাংশন তৈরি এবং কল যে।
ডার্কহার্ট

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