टर्मिनल कमांड लाइन पर कर्सर को स्थानांतरित करने का सबसे तेज़ तरीका है?


156

टर्मिनल में दी गई बहुत लंबी कमांड लाइन पर घूमने का सबसे अच्छा तरीका क्या है?

कहो कि मैंने इस लंबी कमांड लाइन को पाने के लिए तीर कुंजी का उपयोग किया या Ctrl-R

./cmd --option1 --option2 --option3 --option4 --option5 --option6 --option7 --option8 --option9 --option10 --option11 --option12 --option13 --option14 --option15 --option16 --option17 --option18 --option19 --option20 --option21 --option22 --option23 --option24 --option25 --option26 --option27 --option28 --option29 --option30 --option31 --option32 --option33 --option34 --option35 --option36 --option37 --option38 --option39 --option40 --option41 --option42 --option43 --option44 --option45 --option46 --option47 --option48 --option49 --option50 

अब मुझे --option25वहां से कुछ को संशोधित करने के लिए कर्सर (लाइन की शुरुआत या अंत से शुरू) को स्थानांतरित करने की आवश्यकता है।

वहां पहुंचने का सबसे तेज़ तरीका क्या है? मैं आमतौर पर क्या करता हूं Ctrl- Aशुरुआत करने के लिए और फिर बार Alt- बार - Fआगे बढ़ने के लिए, शब्द से शब्द (या Ctrl- Eअंत तक जाने के लिए और Alt- Bफिर पीछे जाने के लिए)। लेकिन एक लंबी लाइन पर जिसमें बहुत अधिक समय लगता है। मेरे द्वारा संशोधित किए जाने वाले भाग में सीधे खोज और कूदने का एक तरीका होना चाहिए, जैसे option25?

जवाबों:


107

चूंकि यह अभी तक बंद नहीं हुआ है, इसलिए यहां कुछ और विकल्प हैं।

  • का प्रयोग करें Ctrl+ xद्वारा पीछा Ctrl+ eसंपादक द्वारा निर्दिष्ट में मौजूदा लाइन को खोलने के लिए $FCEDITया $EDITORया emacs(इसी क्रम में करने की कोशिश की)।
  • यदि आप आदेश पहले भाग गया, मारा Ctrl+ rएक रिवर्स इतिहास खोज और प्रकार के लिए option25(इस मामले में)। लाइन प्रदर्शित की जाएगी। Tabइस बिंदु पर संपादन शुरू करने के लिए मारो ।
  • s///संशोधक के साथ इतिहास विस्तार का उपयोग करें । उदाहरण के !-2:s/--option25/--newoption/लिए, दूसरी-से-अंतिम कमांड फिर से आ जाएगी, लेकिन विकल्प 25 को बदल दें। अंतिम ./cmdकमांड को संशोधित करने के लिए, !stringसिंटैक्स का उपयोग करें : !./cmd:s/--option25/--newoption/
    प्रतिस्थापन में / के स्थान पर किसी भी सीमांकक का उपयोग किया जा सकता है।
  • यदि पिछली पंक्ति को संपादित करते हैं, तो आप त्वरित प्रतिस्थापन का उपयोग कर सकते हैं: ^--option25^--newoption
  • चरित्र खोज। इस पैक्स द्वारा उल्लेख किया गया था, और साथ नियमित रूप से Emacs मोड में किया जा सकता Ctrl+ ]आगे खोज के लिए, और Ctrl+ Alt+ ]पिछड़े खोज के लिए।

मैं दूसरा विकल्प सुझाता हूं। Ctrl+ rवास्तव में आसान और तेज़ है, संपादकों के साथ कोई छेड़छाड़ नहीं करता है, और कमांड चलाने से पहले आप परिणाम देखते हैं (इतिहास के विस्तार के विपरीत)।


203

स्पष्ट होने के लिए, आप " टर्मिनल कमांड लाइन पर कर्सर को स्थानांतरित करने का तेज़ तरीका" नहीं चाहते हैं । आप वास्तव में जो चाहते हैं, वह शेल प्रोग्राम में कमांड लाइन पर नेविगेट करने का एक तेज़ तरीका है ।

उदाहरण के लिए बैश बहुत आम खोल है। यह कमांड लाइन इनपुट को लागू करने के लिए रीडलाइन लाइब्रेरी का उपयोग करता है । और ऐसा कहने के लिए, रीडलाइन बाइंडिंग को जानना बहुत सुविधाजनक है क्योंकि इसका उपयोग न केवल बैश में किया जाता है। उदाहरण के लिए, gdb इनपुट को प्रोसेस करने के लिए Readline का भी उपयोग करता है।

Readline प्रलेखन में आप सभी नेविगेशन से संबंधित बाइंडिंग (और अधिक) पा सकते हैं: http://www.gnu.org/software/bash/manual/bash.html#Readline-Interaction

लघु कॉपी-पेस्ट यदि उपरोक्त लिंक नीचे जाता है:

केवल बहुत ज़रूरी

  • Ctrl-b एक वर्ण वापस ले जाएं।
  • Ctrl-f एक वर्ण को आगे बढ़ाएं।
  • [DEL] या [बैकस्पेस] चरित्र को कर्सर के बाईं ओर हटा दें।
  • Ctrl-d कर्सर के नीचे के वर्ण को हटाएं।
  • Ctrl-_ या Cx Cu अंतिम संपादन कमांड को पूर्ववत करें। आप एक खाली लाइन पर वापस जा सकते हैं।

आंदोलन

  • Ctrl- लाइन की शुरुआत के लिए एक चाल।
  • Ctrl-e लाइन के अंत में जाएं।
  • मेटा-एफ एक शब्द को आगे बढ़ाएं, जहां एक शब्द अक्षरों और अंकों से बना होता है।
  • मेटा-बी एक शब्द पीछे ले जाएँ।
  • Ctrl-l स्क्रीन को साफ़ करें, शीर्ष पर वर्तमान रेखा को पुन: प्रदर्शित करता है।

मारना और हाँकना

  • Ctrl-k वर्तमान कर्सर स्थिति से पंक्ति के अंत तक पाठ को मारें।
  • Md कर्सर को वर्तमान शब्द के अंत में, या, यदि शब्दों के बीच, अगले शब्द के अंत तक। शब्द सीमाएँ वही हैं जो Mf द्वारा उपयोग की जाती हैं।
  • M- [DEL] कर्सर से करेंट शब्द की शुरुआत, या, यदि शब्दों के बीच, पिछले शब्द की शुरुआत तक। शब्द सीमाएँ वैसी ही हैं जैसी कि Mb द्वारा उपयोग की जाती हैं।
  • Ctrl-w कर्सर को पिछले व्हाट्सएप पर मारें। यह M- से भिन्न है क्योंकि शब्द सीमाएँ भिन्न हैं।
  • Ctrl-y Yank ने हाल ही में कर्सर पर बफर में पाठ को मार दिया।
  • मार-रिंग को घुमाएं, और नए शीर्ष पर चढ़ें। आप इसे केवल तभी कर सकते हैं जब पूर्व कमांड Cy या My हो।

एम मेटा की है। मैक्स OS X टर्मिनल के लिए आप सेटिंग / कीबोर्ड में "मेटा विकल्प के रूप में उपयोग विकल्प" को सक्षम कर सकते हैं। लिनक्स के लिए इसकी अधिक जटिल है।

अपडेट करें

यह भी ध्यान दें, कि रीडलाइन दो मोड में काम कर सकती है:

  • एमएसीएस मोड (जो डिफ़ॉल्ट है)
  • vi मोड

Vi मोड का उपयोग करने के लिए बैश को स्विच करने के लिए:

$ set -o vi

जब से मैं पाठ संपादन के लिए विम का उपयोग करता हूं, तब मैं व्यक्तिगत मोड को पसंद करता हूं।

बक्शीश

MacOS टर्मिनल ऐप में (और iTerm में भी) आप कर्सर को स्थानांतरित करने के लिए विकल्प-क्लिक कर सकते हैं (कर्सर क्लिक की गई स्थिति में जाएगा)। यह भी अंदर काम करता है vim


3
मैं इस जवाब को पसंद करता हूं क्योंकि यह नीचे [सार / जड़ / कारण] कैसे कीबोर्ड इनपुट काम करता है (जहां से आता है), यानी रीडलाइन।
यूगनेव्ड

6
मानक उबंटू टर्मिनल में, मेटा (एम) Alt + Shift है, जब तक कि आप मेनू एक्सेस कीबोर्ड शॉर्टकट को अक्षम नहीं करते हैं जिस स्थिति में यह सिर्फ Alt है।
ब्रायनपीरिस

2
कोंड इन कोनोलस इन द मेटा (एम) ऑल्ट की है
पिपो

समस्या यह है कि मेटा + एफ काम नहीं करता है यदि मेटा एएलटी है क्योंकि एएलटी चल रहे कार्यक्रम के मेनू (इस मामले में टर्मिनल) तक पहुंच प्रदान करता है। क्या कोई विकल्प है?
पिथिकोस

1
Mf क्या है, इसलिए आप यहाँ नियंत्रण का उपयोग नहीं करते हैं तो यह क्या है?
पॉजिटिव

33

विकल्प कुंजी दबाए रखें और क्लिक करें कि आप कर्सर को कहां स्थानांतरित करना चाहते हैं, और टर्मिनल कर्सर को सटीक स्थान पर पहुंचाता है।


2
आपने अभी-अभी मेरी कार्यकुशलता की नकल की
लेट गोंजालेज

यह किस वातावरण में काम करता है? मैं मैक ओएस में ही अनुमान लगाता हूं?
अब्दुल

एक कूद सर्वर के माध्यम से भी दूरस्थ ssh linux पर काम करता है।
जॉन जियांग

10

मैं vi संपादन मोड को प्राथमिकता देता हूं (क्योंकि उन कीस्ट्रोक्स को अब मेरी रीढ़ की हड्डी में लगाया गया है (मस्तिष्क का उपयोग नहीं किया जाता है), साथ ही वर्डस्टार 3.3 :-) से CTRL-K, CTRL-X। आप set -o viइसे सक्रिय करने के लिए कमांड लाइन का उपयोग कर सकते हैं (औरset -o emacs वापस करने के लिए) ।

Vi में, यह (ESC-K को लाइन को सबसे पहले प्राप्त करना होगा) " f5;;B" (दोहरे उद्धरण चिह्नों के बिना)।

बेशक, आपको यह समझना होगा कि इससे दूर होने के लिए लाइन पर क्या है। असल में, यह है

f5 to find the first occurrence of "5" (in --option5).
;  to find the next one (in --option15).
;  to find the next one (in --option25).
B  to back up to the start of the word.

आइए देखें कि क्या emacs aficionados बेहतर समाधान के साथ आ सकता है, कम से कम 5 कीस्ट्रोक्स (हालांकि मैं एक धार्मिक युद्ध शुरू नहीं करना चाहता)।

क्या आपने इस बारे में सोचा है कि क्या आप इस भयावह लंबी कमांड को स्क्रिप्ट में रखना चाहेंगे? :-)

वास्तव में, मैं उससे बेहतर एक जा सकता हूं: " 3f5B" "5" की तीसरी घटना को खोजने के लिए फिर शब्द की शुरुआत तक।


स्क्रिप्ट के लिए कोई ज़रूरत नहीं है - बस vi मोड में "v" हिट करें और एक संपादक में कमांड लाइन खोलें। आप कमांडलाइन, इरेटी, "स्क्रिप्ट" को नए सिरे से अधिक अच्छी तरह से प्रारूपित कर सकते हैं, और इसके लिए कोई आवश्यक गति नहीं है। :) तो, "v / 25" आपको वहां 4 वर्णों में मिलता है।
dannysauer 20

लेकिन फिर, आपको इसे चलाने के लिए <Enter> कुंजी से अधिक की आवश्यकता है। @dannysauer
CDR

9

क्रमशः एक शब्द द्वारा पिछड़े / आगे बढ़ने के लिए मेटा-बी / मेटा-एफ का उपयोग करें।

OSX में, मेटा ESC के रूप में अनुवाद करता है, जो बेकार है।

लेकिन वैकल्पिक रूप से, आप टर्मिनल प्राथमिकताएँ खोल सकते हैं -> सेटिंग्स -> प्रोफ़ाइल -> कीबोर्ड और "मेटा कुंजी के रूप में उपयोग विकल्प" की जांच करें।


8

एक बार कमांड चलाने के बाद, रन करें fc

यह $EDITORपिछले कमांड के साथ लॉन्च होगा , फिर आप कमांड को संशोधित करने के लिए अपने नियमित संपादक का उपयोग कर सकते हैं। जब आप सहेजते हैं और बाहर निकलते हैं, तो फ़ाइल निष्पादित हो जाएगी।

.. लेकिन, जैसा कि पैक्स ने कहा - कमांड लाइन विशेष रूप से बेतुकी लंबी लाइनों के संपादन के लिए अच्छी नहीं है - कमांड को स्क्रिप्ट में क्यों नहीं बनाया जाता है?


4

यदि आप एक निश्चित संख्या में शब्दों को आगे बढ़ाना चाहते हैं, तो हिट M-<n>( M-मेटा और इसके लिए आमतौर पर भागने की कुंजी है) तो एक नंबर मारा। यह रीडलाइन के लिए एक दोहराव तर्क भेजता है, इसलिए आप जो भी कमांड दोहरा सकते हैं - यदि आप आगे बढ़ना चाहते हैं तो हिट करें M-<n> M-fऔर कर्सर आगे की <n>संख्या में शब्द ले जाएगा ।

उदाहरण के लिए

 $|echo "two three four five six seven"
 $ M-4
 (arg: 4) echo "two three four five six seven"
 $ M-f
 $ echo "two three four| five six seven"

इसलिए लाइन के आरंभ में कर्सर से आपके उदाहरण के लिए आप टकराएंगे, M-26 M-fऔर आपके कर्सर पर --option25|-or होगा- लाइन के अंत से M-26 M-bआपके कर्सर को यहां रखा जाएगा--|option25


2

वृद्धिशील इतिहास की खोज

टर्मिनल में दर्ज करें:

gedit  ~/.inputrc

फिर पेस्ट कॉपी करें और सहेजें

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

आपको पिछले कमांड को खोजने के लिए पहले 2 या 3 अक्षर दर्ज करने की आवश्यकता है और ऊपर की ओर तीर आपको वहां ले जाएगा जो आपको जल्दी मिल जाएगा:

for f in *.mid ; do timidity "$f"; done

सब मुझे करने की ज़रूरत है दर्ज करें

fo

और हिट अपवर्ड एरो कमांड जल्द ही दिखाई देगा


1

एक विकल्प में उपयोग करना M-x shellहै emacs। उदाहरण के लिए, सभी संपादन सुविधाएं और कीस्ट्रोक्स प्रदान करता emacsहै, इसलिए C-sइसका उपयोग पाठ की खोज के लिए किया जा सकता है option25

(लेकिन मैं अभी भी असली टर्मिनल शेल में रहना पसंद करूंगा, अगर कोई मुझे अच्छी खोज और सुविधाओं को संपादित करने के लिए इंगित कर सकता है।)


0

माउस का प्रयोग करें

कभी-कभी, कमांडलाइन को संपादित करने का सबसे आसान तरीका एक माउस का उपयोग करना है। पिछले कुछ उत्तर आपके $ EDITOR में आपकी वर्तमान लाइन खोलने के लिए एक कमांड देते हैं। मेरे लिए (grml config के साथ zhs) कि संयोजन है Alt+e। यदि आप अपने संपादक में माउस को सक्षम करते हैं, तो आप इसका उपयोग कर सकते हैं।

विम में माउस को सक्षम करने के लिए, इसे अपने ~ / .vimrc में जोड़ें

set mouse=a
set ttymouse=xterm2

यदि आप तब टर्मिनल में एक पाठ चयन करना चाहते हैं (विम करने के लिए mouseclick पास करने के बजाय), क्लिक करने पर Shift दबाए रखें; यह टर्मिनल विशिष्ट है, निश्चित रूप से।

Sysadmins माउस से डरना नहीं चाहिए।


0

साइगविन में, आप विंडो को राइट-क्लिक करके ऐसी सुविधा को सक्रिय कर सकते हैं। पॉप-अप विंडो में, विकल्प ... -> माउस -> सक्रिय करें क्लिक स्थान कमांड लाइन कर्सर -> लागू करें।

अब से, कमांड लाइन के भीतर किसी स्थान पर केवल बाईं माउस बटन पर क्लिक करने से कर्सर वहाँ आ जाएगा।


0

पहला: निर्यात EDITOR = 'नैनो -m'

तब: CTRL + X CTRL + E क्रम से।

आप माउस सक्षम के साथ नैनो संपादक में करंट लाइन खोलेंगे। आप पाठ के किसी भी भाग में क्लिक कर सकते हैं और संपादित कर सकते हैं

तब CTRL + X से बाहर निकलें और बचत की पुष्टि करने के लिए y।


0

मैंने माउस क्लिक पर कमांड लाइन कर्सर ले जाने के लिए एक स्क्रिप्ट बनाई :

  1. Xterm माउस ट्रैकिंग रिपोर्टिंग सक्षम करें
  2. क्लिक द्वारा उत्पन्न एस्केप अनुक्रम का उपभोग करने के लिए रीडलाइन बाइंडिंग सेट करें

यह गितुब पर पाया जा सकता है

एक और पोस्ट पर अधिक जानकारी

echo -e "\e[?1000;1006;1015h" # Enable trackingमाउस के साथ क्लिक करने पर टर्मिनल पर भागने के क्रम को प्रिंट करने पर काम करेगा


0

यह सबसे तेज़ नहीं हो सकता है, लेकिन यहां होने की आवश्यकता है, कुछ एएनएसआई कर्सर आंदोलनों के बारे में पढ़ रहे हैं

एएनएसआई एस्केप सीक्वेंस आपको स्क्रीन पर कर्सर को इच्छानुसार स्थानांतरित करने की अनुमति देते हैं। यह शेल स्क्रिप्ट द्वारा उत्पन्न पूर्ण स्क्रीन उपयोगकर्ता इंटरफ़ेस के लिए अधिक उपयोगी है , लेकिन इसका उपयोग संकेतों में भी किया जा सकता है । आंदोलन से बचने के क्रम निम्नानुसार हैं:

- Position the Cursor:
  \033[<L>;<C>H
     Or
  \033[<L>;<C>f
  puts the cursor at line L and column C.
- Move the cursor up N lines:
  \033[<N>A
- Move the cursor down N lines:
  \033[<N>B
- Move the cursor forward N columns:
  \033[<N>C
- Move the cursor backward N columns:
  \033[<N>D

- Clear the screen, move to (0,0):
  \033[2J  or \033c
- Erase to end of line:
  \033[K

- Save cursor position:
  \033[s
- Restore cursor position:
  \033[u

(...)

प्रॉम्प्ट पर निम्न पंक्ति में प्रॉम्प्ट पर डालने का प्रयास करें (यह थोड़ा स्पष्ट है कि यह क्या करता है यदि प्रॉम्प्ट टर्मिनल से नीचे कई लाइनें हैं जब आप इसे डालते हैं): echo -en "\033[7A\033[1;35m BASH \033[7B\033[6D"यह कर्सर को सात लाइनों को स्क्रीन पर ले जाना चाहिए, शब्द "BASH" प्रिंट करें ", और फिर सामान्य प्रॉम्प्ट का उत्पादन शुरू करने के लिए वापस लौटें।


उदाहरण :

कर्सर को 7 लाइनों में वापस ले जाएँ:

echo -e "\033[7A"

कर्सर को लाइन 10, कॉलम 5 पर ले जाएँ:

echo -e "\033[10;5H"

एक कार्यक्रम को रंगीन करने के लिए जल्दी से रंग कोडों की प्रतिध्वनि करें :

echo -e "\033[35;42m" ; ifconfig
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.