আমি কিছু পরীক্ষা করার সময় একটি অর্ধ-টাইপযুক্ত কমান্ড মনে রাখবেন


97

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

  • ctrl+ alt+ হিট করুন F2এবং অন্য ভার্চুয়াল কনসোলটিতে লগ ইন করুন এবং আমি কী চাই তা সন্ধান করুন, তারপরে ফিরে যান এবং চালিয়ে যান
  • ctrl+ a, প্রতিধ্বনি + space+ টাইপ করুন enter, আমি কী চাইছিলাম তা সন্ধান করুন, আমার কমান্ড না পাওয়া পর্যন্ত টিপুন , ctrl+ a, delx 5, ctrl+ e, এবং চালিয়ে যান
  • আমি এখন পর্যন্ত আমার মাউস দিয়ে যা লিখেছি তা হাইলাইট করুন (জিপিএম চলমান থাকলে, যা এটি সাধারণত হয়), বাধা দিতে ctrl+ টিপুন, জিনিসটি cহাইলাইট করার জন্য আমার মাউসটি ব্যবহার না করার বিষয়ে সতর্ক থাকাকালীন আমি কী চেয়েছিলাম তা সন্ধান করুন, তারপরে মাঝের মাউস বোতামটি টিপুন একটি নতুন প্রম্পটে এবং চালিয়ে যান
  • কমান্ড লাইন দেবতাদের কাছে প্রার্থনা করুন যে অর্ধ-লিখিত আদেশটি কোনও প্রতিকূল প্রভাব ফেলবে না তবে কেবল ব্যর্থ হবে, এবং আদাতে প্রবেশ করুন, তারপরে আমি যা চেয়েছিলাম তা সন্ধান করুন, আমার কমান্ডটি ফিরে না পাওয়া পর্যন্ত উপরে চাপুন, এবং চালিয়ে যান
  • আমার টাইম মেশিনে ঝাঁপুন, সময়ে ফিরে ভ্রমণ এবং কমান্ড টাইপ করার আগে পর্দা শুরু করতে নিজেকে স্মরণ করিয়ে দিন, উপস্থিতটিতে আবার ভ্রমণ করুন, ctrl+ টিপুন a c, আমি কী চাই তা জানতে, ctrl+ টিপুন a ctrl+aএবং চালিয়ে যান

সুতরাং আমি যা জানতে চাই তা হ'ল এটি করার আরও কিছু মার্জিত উপায় আছে কি? এক ধরণের সাবসেল-কমান্ড বা অনুরূপ?

আমি এমন পদ্ধতিগুলিতে সর্বাধিক আগ্রহী যেগুলি কাজের জন্য কোনও প্রস্তুতি বা সেটআপের প্রয়োজন হয় না।

উত্তর:


68

এর কিছুটা দ্রুততর সংস্করণ Alex এর Ctrl + + A Ctrl+ + K(যা লাইনের সামনে চলে আসে এবং তারপর সবকিছু এগিয়ে মধ্যেও) শুধু ব্যবহার করা Ctrl+ + U, যা ব্যাশ উপর অনগ্রসর মধ্যেও, এবং সমগ্র লাইন (নির্বিশেষে আপনার বর্তমান অবস্থানের) zsh উপর। তারপরে আপনি এটি আবার আটকানোর জন্য Ctrl+ ব্যবহার করেনY


1
এটি পরীক্ষা করে, আমি উপসংহারে পৌঁছেছি যে Ctrl + U পিছনে যায় না এবং এগিয়ে কেটে না, বরং পিছনে পিছনে কাটা হয়। কমান্ডের মাঝখানে কার্সার থাকার পরে কমান্ড লাইনে এর পেছনের যা কিছু রয়েছে তা ছেড়ে যায়। @ অ্যালেক্সের সমাধানের তুলনায় এখনও 33% উন্নতি হয়েছে, যেহেতু এটি একটি কীস্ট্রোকটি সংরক্ষণ করে।
লরিজ ভি ভি থালো

2
@ লাজির ওহ, ঠিক আছে; উপর zshএটা সমগ্র লাইন কেটে, কিন্তু উপর bashএটি পিছন মধ্যেও। আমি লক্ষ্য করেছি কখনো পার্থক্যটা সামনে
মাইকেল Mrozek

2
ওহ, আমি জানতাম না যে Ctrl + U বাফার মারার জন্য পাঠ্যও রাখে। জেনে ভালো লাগল! :)
অ্যালেক্স

1
^U ^Kএর মতো একই প্রভাব থাকবে ^A ^Kতবে এটি প্রান্তিকভাবে আরও আর্গোনমিক এবং এর অধীনে উল্লেখযোগ্যভাবে আরও সুবিধাজনক screen
প্রেরণা

53

লাইন শুরু করতে, একটি হ্যাশ তৈরি করতে এবং রিটার্ন টিপতে সিটিআরএল-এ করুন - এইভাবে এটি একটি মন্তব্য হিসাবে কমান্ডের ইতিহাসে থাকবে এবং আপনি এটিতে কার্সার দিয়ে ফিরে পেতে পারেন

সম্পাদনা: সবেমাত্র লক্ষ্য করা গেছে এটি আপনার # 2; এ কিছুটা মার্জিত বৈকল্পিক)


1
হ্যাঁ, এবং আমি কেন এটি ভেবে দেখিনি? ধন্যবাদ!
লরিজ ভি ভি থালালো

1
আমার নিজের উত্তর পোস্ট করার আগে আমাকে পড়তে হবে। জেমস ঠিক আছে।
শন সি

4
মনে রাখবেন যে এটি কাজ করবে না cshবা zshকারণ তারা ইন্টারেক্টিভ শেলটিতে মন্তব্যের অনুমতি দেয় না। ইন zshআপনি সঠিক বিকল্প সক্রিয় করা প্রয়োজন: setopt interactive_comments
সাম হোচেভার

1
@ সাম হ্যাঁ, তবে ": কমান্ড" এর একই প্রভাব রয়েছে (":" = নাল কমান্ড)
ব্যারিকার্টার

6
@ বার্যকার্টার: না, :এই উদ্দেশ্যে ক্ষতিকারক হিসাবে বিবেচনা করা উচিত এবং কখনও কখনও প্রস্তাব দেওয়া হবে না। এটি সেমিকোলনের পরে, ব্যাকটিক্সের অভ্যন্তরে সমস্ত সম্পর্কিত পার্শ্ব প্রতিক্রিয়া সহ সমস্ত কিছু সম্পাদন করবে।
সাম হোসেভর

29

হিট করুন Ctrl+A, Ctrl+Kলাইনের শুরুতে যেতে এবং এর শেষে মুছে ফেলুন (হত্যা)। তারপরে আপনার গবেষণাটি করুন এবং যখন Ctrl+Yআপনার সংরক্ষিত (নিহত) লাইনটি ফিরিয়ে দিতে হিট (ইয়াঙ্ক) চালিয়ে যাওয়ার জন্য প্রস্তুত ।


3
আহা, এখন এটি আমার মনের মত আরও বেশি। এবং আমি এটি ইমাকগুলিতে সমস্ত সময় কমান্ড লাইনে একই কাজ করার কথা ভাবা উচিত ছিল।
লরিজ ভি ভি থালালো

13

Zsh, আমি টাইপ Ctrl+ + Zকমান্ড আমি টাইপ করছি "স্থগিত" এবং অন্য কমান্ড টাইপ করতে। আমি এই কমান্ডটি চালানোর পরে (বা এটি Ctrl+ সহ বাতিল করে দিয়ে C) স্থগিত কমান্ডটি সংস্করণে ফিরে আসবে (এমনকি কার্সারের অবস্থান মনে করে)। অতিরিক্ত সুবিধা হিসাবে, আমি Ctrl+ টাইপ করার সময় যদি কমান্ড লাইনটি খালি থাকে Zতবে কীটি তার bgপরিবর্তে বিল্ট- ইনকে আহ্বান জানায় (সুতরাং একটি ডাবল Ctrl+ Zসরাসরি পটভূমিতে একটি চলমান কমান্ড প্রেরণ করে)।

fancy-ctrl-z () {
  emulate -LR zsh
  if [[ $#BUFFER -eq 0 ]]; then
    bg
    zle redisplay
  else
    zle push-input
  fi
}
zle -N fancy-ctrl-z
bindkey '^Z'          fancy-ctrl-z

বাশে কীভাবে অনুরূপ কিছু করতে হয় তা আমি জানি না।

যে কোনও শেলের মধ্যে আপনি বর্তমান লাইনের শুরুতে একটি যুক্ত# করার স্বল্প-প্রযুক্তি পদ্ধতি ব্যবহার করতে পারেন ।


2
আপনার ফাংশন প্রশংসনীয়, কিন্তু আপনি কি জানেন যে ইতিমধ্যে অন্তর্নির্মিতzsh জন্য একটি ফাংশন আছে ? এটি বলা হয় এবং এটির জন্য আপনাকে যা করতে হবে তা হ'ল । push-linebindkey
কালেব

@ কালেব: আমি জানি না কেন আমি এখানে push-inputচেয়ে বরং কেন ব্যবহার করি push-line, push-lineএটি আরও উপযুক্ত বলে মনে হয় (সম্ভবত zsh এর পুরাতন সংস্করণগুলি কেবল ছিল push-input?)। তবে এটি বাকি ফাংশনের প্রতিস্থাপন নয়।
গিলস 18

যতদূর আমি কেবলমাত্র পার্থক্যটি বলতে পারি চলমান কাজের ব্যাকগ্রাউন্ডের একই-বাধ্যতামূলক প্রভাব। আমি কিছু অনুপস্থিত করছি?
কালেব

1
@Caleb: না, এটা ঠিক যে আমি সংযোগ বের হচ্ছে দুই উভয় সুবিধাজনক ( push-lineথাকার, একটি খালি লাইনে অনর্থক bgউপর Ctrl+Zশুধুমাত্র দরকারী যখন আমি শুধু যে প্রক্রিয়া স্থগিত করে থাকেন Ctrl+Zএবং স্মৃতিসম্বন্ধীয় (আমি হয় প্রক্রিয়া backgrounding করছি) বা আংশিক কমান্ড লাইন)।
গিলস

3
@ কালেব push-inputপুরো ইনপুট বাফারকে স্থগিত করে, যেখানে push-lineকেবল বর্তমান লাইন স্থগিত করে। যদি আমি একটি মাল্টলাইন কমান্ড টাইপ করি, আমি পুরো কমান্ডটি স্থগিত করতে চাই, push-inputঠিক এটি সঠিক। আমি এর push-inputচেয়ে প্রায়শই দরকারী বলে মনে করি push-line(যদি আমি কোনও মাল্টলাইন ইনপুট বাফারে একটি লাইনে দেরি করতে চাই, তবে আমি কেবল লাইনের শুরুতে নেভিগেট করতে এবং একটি নতুন লাইন সন্নিবেশ করতে পারি), তাই আমি অবাক push-lineহয়েছি কেন ডিফল্ট কী-বাইন্ডিংটি পেয়েছে এবং না push-input
গিলস

13

ব্যাশ, যে টাইপ Alt+ + #

তারপর যখন আপনি প্রস্তুত, প্রেস Upতারপর Alt+ + #

প্রথমটিকে #একটি মন্তব্যে পরিণত করার জন্য লাইনটির শুরুতে একটি রাখে , তারপরে লাইনটি গ্রহণ করে, মনে হয় আপনি চাপ দিয়েছিলেন Enter

তারপরে, আপনি যখন এটি দ্বিতীয়বার করবেন, এটি দেখতে পাবে যে লাইনটি #শুরুতে ইতিমধ্যে শুরু হয়েছে, তাই এটি এটি সরিয়ে দেয় এবং এটি গ্রহণ করে, আবার Enterকীটি সংরক্ষণ করে ।

দ্বিতীয় সময় শুধু আরেকটি সন্নিবেশ তাহলে #, তাহলে আপনি টাইপ করতে হবে Alt+ + - Alt+ + #পরিবর্তে।

আপনি zsh লাগিয়ে একই কাজ করতে পারেন

bindkey -M emacs '\e#' pound-insert

আপনার ~ / .zshrc এ।

অথবা, আপনি যদি vi বাইন্ডিং ব্যবহার করে থাকেন তবে আপনি #কমান্ড মোড থেকে বাশ এবং zsh উভয় ক্ষেত্রে টাইপ করতে পারেন ।


2
আমার পক্ষে কাজ করে না, দ্বিতীয় কমান্ডটি # টি সরিয়ে বোঝায় কেবল সামনে আরও # টি যুক্ত করা হয়েছে।
লরিজ ভি ভি থালালো

1
প্রথমটি কি কাজ করে? আপনি বাশের কোন সংস্করণ ব্যবহার করছেন?
মাইকেল

3
Alt + # আপনার তৃতীয় অনুচ্ছেদে বর্ণিত হিসাবে কাজ করে, তবে আপনার চতুর্থের মতো নয়, এটি কেবল সামনের দিকে অন্য একটি # সংশোধন করে এবং লাইনটি স্বীকার করে। আমি বাশ 4.1.5 (1) -উবুন্টু 10.10 এ রিলিজ ব্যবহার করি।
লরিজ ভি ভি থালো

1
ওহে প্রিয়, বাশে এটির জন্য একটি সংখ্যাসূচক যুক্তি প্রয়োজন, যেমন Esc+1তারপর Alt+ #টগল করতে।
মাইকেল

এটি কাজ করে তবে কেবল Ctrl + A Del Ctrl + E এর চেয়ে অনেক বেশি জটিল, বিশেষত আমার কীবোর্ড বিন্যাসে যেখানে Alt + # আসলে Alt + Shift + 3 ift
লরিজ ভি ভি থালালো

10

আমার পছন্দের বৈশিষ্ট্যগুলির মধ্যে একটি zshহ'ল বিল্টিন পুশ-লাইন ফাংশন যা এখানে অন্যান্য উত্তরে কোনও হ্যাকারি ছাড়াই এটি যত্ন করে। আমার ফাইলটিতে এটি Ctrl+ এর lসাথে আবদ্ধ আছে .zshrc:

bindkey '^L' push-line

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

আপনি এটির একাধিক স্তরকে চেইনও করতে পারেন এবং আদেশগুলি বিপরীত ক্রমে আপনার কাছে ফিরে আসবে যে আপনি সেগুলিকে সরিয়ে রেখেছেন।


5
পূর্বনির্ধারিত Ctrl+Qএবং ESC qপূর্বনির্ধারিত (ইমাস মোডে) আবদ্ধ ।
গিলস

বাশ জন্য অনুরূপ কিছু আছে?
ম্যাগনাস

@ ম্যাগনাস: দয়া করে এই প্রশ্নের বাকি উত্তরগুলি পর্যালোচনা করুন। ব্যাশের জন্য সমাধান রয়েছে, কেবল এটির মতো মার্জিত নয়।
কালেব

@ কালেব, আমার আরও নির্দিষ্ট হওয়া উচিত ছিল, বাশের জন্য কি একই জাতীয় একক কী সমন্বয় আছে ?
ম্যাগনাস

1
এটি পরিষ্কারভাবেই "সঠিক" উত্তর, যাইহোক Zsh এর পক্ষে! আমি কেবলমাত্র push-line-or-editউইজেটটি উল্লেখ করতে চাই , যা কোনও কীম্যাপে ডিফল্টরূপে আবদ্ধ নয়। শীর্ষ-স্তরের প্রম্পটে এটি একই জিনিসটি করে push-lineতবে কোনও প্রম্পট স্তরের নীচে এটি সম্পূর্ণ কমান্ডটিকে একাধিক-লাইন বাফারে রূপান্তরিত করে। একটি কী-বাইন্ডিংয়ে দুটি দুর্দান্ত ফাংশন! আমি প্লেইনের push-line-or-editপরিবর্তে বাইন্ডিংয়ের প্রস্তাব দিতে পারি push-line। আপনি কিছুই হারাবেন না এবং দরকারী কার্যকারিতা অর্জন করুন।
wjv

5

ctrl- a ctrl- kকৌতুক ছাড়াও , আপনি যদি স্ক্রিনে থাকেন, ঠিক ctrl- a dবিচ্ছিন্ন করতে তারপরে পুনরায় যোগাযোগ করুনscreen -r

আপনি ctrl+ সহ আরও একটি উইন্ডো খুলতে পারেনa c


8
আপনি যদি স্ক্রিনে থাকেন তবে এর সাথে অন্য একটি উইন্ডো খুলুন Ctrl+A c
গিলস

1
@ গিলস .. যদি না আপনার শেল স্টেটের কিছু দিক (ভেরিয়েবল, ফাংশন, উপকরণ ইত্যাদি) ব্যবহার করার প্রয়োজন হয়।
অনুপ্রেরণা

4

বিকল্প উপায়, যদিও নিখুঁত নয়, টিপুন Ctrl-X Ctrl-E। এটি আপনার অর্ধ টাইপযুক্ত কমান্ড সহ আপনার ডিফল্ট সম্পাদকটি খুলবে। তারপরে আপনি কোনও ফাইলের মধ্যে আপনার কমান্ড সংরক্ষণ করতে পারেন বা আপনার সম্পাদকের মধ্য থেকে একটি নতুন শেল খুলতে পারেন। আপনি যখন নতুন শেলটি প্রস্থান করবেন এটি আপনাকে সম্পাদকে ফিরিয়ে দেবে এবং সামগ্রীগুলি সংরক্ষণ করলে তা স্বয়ংক্রিয়ভাবে কার্যকর হবে exec

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

:wq            # execute the command
:cq            # cancel and abort
:! command     # execute command
:shell         # open a new shell
:r filename    # insert the contents of a file for editing
:r ! command   # insert the output of a command for editing

খুব সুন্দর বিকল্প। আমি vi-emacs-agnostic, সুতরাং পাওয়ারটুলগুলি সত্যই প্রয়োজন হলে আমি এটি ব্যবহার করে একটি ক্ল্যাম হিসাবে খুশি হব। (।। ষষ্ঠ কথা বলছেন, আমি N64 লিনাক্স এমুলেটর চেষ্টা Mupen64Plus একটি সময় আগে Esc চাপুন সংরক্ষণ না করে এমুলেটর শোধবোধ আমি শীঘ্রই আপ কিছু খেলে দিলেন।)
Lauritz ভি Thaulow

1
@ ল্যাজার, ডেবিয়ান / উবুন্টু চালানোর জন্য sudo update-alternatives --config editorএবং আপনার প্রিয় সম্পাদক চয়ন করুন। অন্যান্য সিস্টেমগুলির জন্য আপনার প্রিয় সম্পাদকের জন্য এডিটর বা ভিজুয়াল এনভায়রনমেন্ট ভেরিয়েবল সেট করুন, যেমন export EDITOR=/usr/bin/nanoআপনার .bashrc এ যুক্ত করুন।
ফোর্সফেস্ক

3

#লাইনের শুরুতে যুক্ত করার পদ্ধতির অনুরূপ , একটি যুক্তিযুক্ত সহজ পদ্ধতি যা আমি ব্যবহার করি যা লাইনের শুরুতে ফিরে আসার প্রয়োজন হয় না:

কেবল একটি উন্মুক্ত উদ্ধৃতি যুক্ত করুন এবং এটি একা বা দ্বিগুণ হোক না কেন এটি বন্ধ করবেন না

তারপরে টিপুন Enter

তারপরে টিপুন CtrlC

আংশিক কমান্ড কমান্ড ইতিহাসে সংরক্ষণ করা হয় (আপ অ্যারোর মাধ্যমে উপলব্ধ) তবে বাস্তবে কার্যকর হয় না।


2

Zsh ব্যবহার করে, যদি আপনি টাইপ করেন <ESC> q(পলায়ন, তারপরে Q), আপনার প্রম্পট লাইনটি কেটে দেওয়া হবে, যাতে আপনি অন্য আদেশটি টাইপ করতে পারেন। আপনি পরবর্তী প্রম্পটে স্বয়ংক্রিয়ভাবে আপনার কাটা পাঠ্যটি ফিরে পাবেন।

এটি একই সাথে বেশ কয়েকটি লাইন মনে রাখতে পারে, যাতে কোনও লাইন আপনার জন্য অপেক্ষা করার সময় আপনি এটি ব্যবহার করতে পারেন। এমনকি আপনার কাটা লাইনটি পুনরায় শুরু করতে বিলম্ব করতে আপনি খালি লাইনে এটি ব্যবহার করতে পারেন।

চেকিং / প্রস্তুতির জন্য যদি আপনাকে বেশ কয়েকটি কমান্ড ব্যবহার করতে হয় তবে এটি সর্বাধিক কার্যকর উপায় নয় ( <ESC> qপ্রতিটি কমান্ডের আগে আপনাকে পুনরায় টাইপ করতে হবে )। তবে আমি মনে করি এটি একটি সংক্ষিপ্ত শর্টকাটে বাঁধাই সম্ভব।


আপনি যদি কেবল ম্যানুয়ালটি পরীক্ষা করতে চান তবে টাইপ করুন <ESC> h(পালানো, তারপরে H)। এটি run-helpঅন্তর্নির্মিতভাবে চালিত করবে , কমান্ড লাইনের প্রথম শব্দটি যুক্তি হিসাবে with একবার শেষ হয়ে গেলে আপনি নিজের লাইনটি আবার খুঁজে পাবেন।


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