হিস্ট্রি কমান্ডটি কার্যকর না করে কমান্ড লাইনে রাখুন


57

আমি ব্যবহার করি! N যেখানে (এন) হিস্ট্রি ফাইলটিতে একটি লাইন সম্পাদন করার জন্য লাইন নম্বরটি আমি কমান্ড প্রম্পটেই সম্পাদন করতে চাই যা আমি ইতিহাসের চেয়ে কম খুঁজে পাই।

তবে একটি কমান্ড লাইনের ইতিহাস ইভেন্ট রয়েছে যা আমি নিজে নিজেই সংশোধন করতে চাই। আমি কমান্ড লাইনে কীভাবে কোনও ইতিহাসের ইভেন্টের বিষয়বস্তুটি বাস্তবায়ন না করেই inোকাতে পারি যাতে আমি সংশোধন করতে পারি এবং তারপরে ফিরে টিপতে পারি?

সেরা

উত্তর:


71

ইতিহাস প্রতিস্থাপনের পরে কমান্ডটি সম্পাদন করার পরিবর্তে কমান্ডটি মুদ্রিত হওয়ার অনুরোধ করতে, :p সংশোধক যুক্ত করুন , যেমন !42:p। ফলস্বরূপ কমান্ডটি ইতিহাসে প্রবেশ করা হবে, সুতরাং আপনি Upএটি সম্পাদনা করতে টিপতে পারেন ।

আপনার কাছে histverify বিকল্প সেট ( shopt -s histverify) থাকলে আপনার কাছে সর্বদা ইতিহাসের বিকল্পগুলির ফলাফল সম্পাদনা করার সুযোগ থাকবে।

fcBuiltin ইতিহাস সম্প্রসারণ (কোন শব্দ designators) সীমিত অ্যাক্সেস দেয়, এবং আপনি একটি বহিস্থিত সম্পাদকে একটি পূর্ববর্তী কমান্ড সম্পাদনা করতে দেয়।

আপনি ব্যবহার করতে পারেন !prefixগত কমান্ড দিয়ে শুরু উল্লেখ করতে prefixএবং !?substringশুরু গত কমান্ড উল্লেখ করতে substring। আপনি কী সন্ধান করছেন তা যখন জানবেন তখন এটি অনেক বেশি সময় বাঁচাতে পারে history | less

পূর্ববর্তী ইতিহাস মাধ্যমে অনুসন্ধান করতে আরেকটি উপায় ক্রমবর্ধমান অনুসন্ধান হল: প্রেস Ctrl+ + Rএবং আপনি যা খুঁজছেন তা একটি সাবস্ট্রিং লিখে শুরু। এখন পর্যন্ত অনুসন্ধান স্ট্রিংয়ের পূর্ববর্তী উপস্থিতিতে যেতে Ctrl+ টিপুন Rএবং যদি আপনি খুব বেশি দূরে চলে যান তবে Ctrl+ Sসর্বাধিক ছাড়া অন্য কী Ctrl+ + R, Ctrl+ + S, Backspaceএবং সাধারণ অক্ষরের ক্রমবর্ধমান অনুসন্ধান বিনষ্ট এবং তাদের স্বাভাবিক প্রভাব পড়ে না (, লাইন আপনি পৌঁছে গেছেন কার্সার সরানোর জন্য যেমন নির্দেশক তীরচিহ্নগুলি আছে Enterকমান্ড চালানোর জন্য)।


আপনার প্রথম উদাহরণে একটি টাইপ রয়েছে ...
pbm

9
stty -ixonCtrl-s কাজ করার আগে আপনাকে করতে হবে।
ডেনিস উইলিয়ামসন

@ ডেনিস: বাহ, আধুনিক টার্মিনাল এমুলেটররা ডিফল্টরূপে এটি করে না? <টেস্ট> আপনি ঠিক বলেছেন, উবুন্টুতেও জিনোম-টার্মিনালের প্রবাহ নিয়ন্ত্রণ রয়েছে!
গিলস 'তাই মন্দ হওয়া বন্ধ করুন'

আমি জানি না তারা এখনও কেন করে। কিছু স্ক্রল করার সময় এটি ধরা অসম্ভব। আপনি Ctrl-s টিপানোর সময় আপনি আবার একটি প্রম্পট পেয়ে যাবেন pt এবং ধীর সিরিয়াল সংযোগগুলি বেশিরভাগই অতীতের একটি বিষয়।
ডেনিস উইলিয়ামসন

@ ডেনিসের মতামতটি Ctrl-sগুরুত্বপূর্ণ, অন্যথায় আমার মতোই আটকে যায় ।
ইম্জ - ইভান জাকারিয়াচেব

15

আরেকটি ছোট একটি: Alt+#

বর্তমান লাইনটি মন্তব্য করে এবং ইতিহাসের বাফারে নিয়ে যায়।

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


2
এছাড়াও Esc, #কাজ করে
স্টিভেন পেনি

এবং আপনি এটি অন্য কোনও কেট কম্বো (fn + Alt + shift + #) এর বিপরীতে (
শিফ্টটি

7

প্রবেশের আগে হিট করার আগে আপনি ইতিহাসকে প্রসারিত করার জন্য যাদু স্থান ব্যবহার করতে পারেন। আপনার .inputrc এ, ম্যাজিক স্পেসে স্থান মানচিত্র:

$if Bash
     Space: magic-space
$endif

এখন, যখনই আপনি ইতিহাসের নির্দিষ্টকরণের পরে কোনও স্থান টাইপ করেন, তা অবিলম্বে প্রসারিত হবে - আপনি যদি এটি সম্পাদনা করতে চান তবে খুব সহজ!



4

Ctrl+rআপনি ব্যবহার করে ইতিহাস অনুসন্ধান করতে পারেন:

pbm@tauri ~ $ 
(reverse-i-search)`xran': xrandr -o normal

আপনি যে কোনও আদেশ সন্ধান করেছেন তা সম্পাদনা করা যেতে পারে ...


আমি মনে করি যে আপনার যা প্রয়োজন ঠিক তা পেয়েছি: চালানো shopt -s histverifyএবং পরের বার যখন আপনি !nকমান্ডটি ব্যবহার করতে চান তা কার্যকর করা হবে না তবে কেবল কমান্ড লাইনে রাখা হবে ...


Ctrl + r দিয়ে অনুসন্ধান করার আগে আপনাকে কোনও কমান্ড কার্যকর করতে হবে, ভাস যা চাইছে তা নয়।
ফুনেহে

1
আমি বুঝতে পারি না কীভাবে এটি তার অনুরোধটি করে না। আমি যুক্ত করব যে আপনি যদি কমান্ডটি চালানোর আগে প্রথমে সম্পাদনা করতে চান তবে ডান কমান্ডটি খুঁজে পাওয়ার পরে আপনি কেবল ট্যাবটি চাপতে পারেন।
স্টিভেন ডি

2
সুতরাং পদ্ধতিটি হবে, (1) Ctrl + r, (2) টাইপ করুন যতক্ষণ না আপনি কমান্ড খুঁজে পান, (3) টিএবি, (4) কমান্ড সম্পাদনা করুন, (5) ENTER।
স্টিভেন ডি

1
@ ফুয়েনহে: "তবে একটি কমান্ড লাইনের ইতিহাস ইভেন্ট রয়েছে যা আমি নিজে নিজেই সংশোধন করতে চাই"
পিবিএম

1
!n:pকাজ করবে না ?
অ্যালেক্স

1

আমি প্রায়ই এটি চেয়েছিলেন। আমি যখন csh (এবং tshsh) ব্যবহার করতাম, তখন আমার একটি প্রতিমা ছিল:
!:88*:p

এই আইডিয়োমটি আপনি বর্তমান কমান্ড লাইনে যে টাইপটি টাইপ করছেন সেখানে পূর্ববর্তী কমান্ডের "শেষ শব্দটির মাধ্যমে 88 শব্দ" সন্নিবেশ করান, যা সাধারণত শেষ হয়। সিএসএসে, কোনও শব্দ তৈরি করা এই জাতীয় অভিব্যক্তির জন্য ত্রুটি নয়। এটি হল 88 শব্দ বা এটির অনুসরণকারী কোনও শব্দ থাকার দরকার নেই। যদি 88 টি শব্দ না থাকে, তবে এটি টাইপ করা কমান্ডের শেষে কোনও শব্দ যুক্ত করে না এবং ফলস্বরূপ ফলস্বরূপ কমান্ড লাইনটিকে ইতিহাসে ঠেলে দেয়।

আপনি সম্ভবত জানেন,
*! (মত !! এবং! -1) পূর্ববর্তী আদেশ;
*: 88 শব্দটি 88 (প্রথম শব্দটি - সাধারণত কমান্ডটি শূন্য হয়) এবং সিএসএসের জন্য এই জাতীয় একটি শব্দ উপস্থিত থাকা প্রয়োজন, তবে ...
*: 88 * সমস্ত শব্দ 88 এর সাথে শুরু হয়, এবং তারপরে csh করে শব্দটির অস্তিত্বের প্রয়োজন নেই;
*: p এর অর্থ মুদ্রণ, তবে কমান্ড লাইনটি কার্যকর করবেন না।
P: এর সাথে বা ছাড়াই কমান্ডের ইতিহাসে কমান্ড লাইন যুক্ত হয়।

"88 কেন?" আপনি আশ্চর্য? কারণ এটি * আমার যা প্রয়োজন তা একই কী। আপনার যদি কমান্ডগুলি দীর্ঘ হয় তবে সম্ভবত!: 888 *: p আপনার প্রয়োজন। দুঃখিত এটি বাশ আফাইকের সাথে কাজ করে না। বাশ কেবল বলবে bash: :88*: bad word specifier

মজাদার ঘটনা: আপনার কমান্ডটি সাধারণত প্রথম হওয়ার দরকার হয় না।
> /tmp/foo echo My command is word 3
ব্যাশ এবং সিএসএসে বৈধ।


প্রশ্নটি যেহেতু বাশের জন্য ট্যাগ করা আছে, তাই আপনার সমাধানটি কেবল (টি) সিএসএসে কাজ করে বলে শুরু করে নেওয়া ভাল।
zagrimsan

0

আমি সাধারণত অনুসন্ধান করতে Ctrl+ rএবং তারপরে কার্যকর না করেই লাইনের শেষে যেতে Ctrl+ ব্যবহার করি e



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