बेहतर संपादन क्षमताओं के साथ शेल


11

गोले (कम से कम जो मुझे पता है) में वास्तव में खराब कमांड संपादन क्षमताएं हैं।

उदाहरण के लिए:

  • मैं कमांड के किसी भी बिंदु पर कर्सर को इंगित नहीं कर सकता।
  • मैं कमांड में टेक्स्ट का चयन और बैकस्पेस / डिलीट / रिप्लेस नहीं कर सकता।

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

क्या कोई समाधान है जो इन के लिए अच्छा है?


3
आप एक शेल के साथ एक टर्मिनल का सामना कर रहे हैं।
JdeBP

जवाबों:


13

बैश वास्तव में इस पर काफी अच्छा है। आपको बस इसके शॉर्टकट सीखने की जरूरत है। उदाहरण के लिए (डिफ़ॉल्ट emacs मोड में):

  • Ctrl+ A: लाइन की शुरुआत में जाएँ।
  • Ctrl+ E: पंक्ति के अंत में जाएँ।
  • Ctrl+ B: एक वर्ण को पीछे की ओर ले जाते हैं।
  • Ctrl+ F: एक वर्ण को आगे की ओर ले जाते हैं।
  • Alt+ B: एक शब्द को पीछे की ओर ले जाएँ।
  • Alt+ F: एक शब्द को आगे बढ़ाएं।
  • Ctrl+ K: लाइन के अंत तक सब कुछ हटा (कट) दें।
  • Alt+ D: कर्सर के बाद शब्द को हटाएं (काटें)।
  • Ctrl+ W: कर्सर से पहले शब्द हटाएं (काटें)।
  • Ctrl+ Y: yank (पेस्ट) क्या बफर में है (आपने उदाहरण के लिए Ctrl+ Kया Alt+ के साथ क्या काटा D)

और भी कई हैं। man readlineयह देखने के लिए पढ़ें कि और क्या उपलब्ध है। आप उन्हें रखकर अलग-अलग शॉर्टकट असाइन कर सकते हैं ~/.inputrc। उदाहरण के लिए, बनाने के लिए Ctrl+ Leftवापस एक शब्द जाने के लिए और Ctrl+ Rightआगे एक शब्द जाना, अपने में जोड़ना ~/.inputrc:

"\e[1;5D": backward-word 
"\e[1;5C": forward-word

यह पता लगाने के लिए कि उन अजीब कोड का क्या मतलब है, Ctrl+ दबाएँ Vऔर फिर उस कुंजी को दबाएँ जिसे आप उपयोग करना चाहते हैं। यदि आप Ctrl+ के साथ प्रयास करते हैं Right, तो आप देखेंगे ^[[1;5C। बदलें ^[साथ \eमें ~/.inputrc


तुम भी अन्य गोले में देखना चाहते हो सकता है। लोकप्रिय "आधुनिक", सुविधा संपन्न गोले में शामिल हैं:


gnome-terminalआप के साथ एक शब्द आगे और पीछे नेविगेट करने के ESCबजाय बटन का उपयोग ALTकरना होगा। । .. या एक टर्मिनल पर स्विच करें जो इसके लिए मेनू मेनू में Alt का उपयोग नहीं करता है। । । जैसे xterm या साकुरा
सर्गी कोलोडाज़नी

@ मेरे सिस्टम पर नहीं, धन्यवाद। मुझे नहीं पता कि आपने इसे इस तरह से सेट किया है या यदि यह उबंटू द्वारा कुछ डिफॉल्ट किया गया है। Esc को अक्सर Alt के पर्याय के रूप में प्रयोग किया जाता है।
टेराडन

टर्मिनल के बीच कोई साझा कटौती बफ़र्स नहीं है।
क्रेग हिक्स

7

आप अपनी पसंद के संपादक को अपनी पसंद EDITORके संपादक को सेट करके और CTRL+ X+ Eया CTRL+ X/ CTRL+ मारकर अपनी खाली या आंशिक रूप से टाइप की गई कमांड को संपादित कर सकते हैं E, जो वर्तमान में संपादित की जा रही लाइन को खोलती है EDITOR;

उदाहरण के लिए, की स्थापना EDITORकरने के लिए geditकर देगा CTRL+ X+ Eऔर CTRL+ X/ CTRL+ EGedit में मौजूदा लाइन खोलें।

इसे स्थायी समाधान बनाने के लिए, आप इसमें सेट कर सकते EDITORहैं ~/.bashrc

यह कमांड को संपादित करने के लिए एक पूरी तरह से विकसित ग्राफिकल टेक्स्ट एडिटर का उपयोग करने की अनुमति देता है; संपादित कमांड चलाने के लिए, बस दस्तावेज़ को सहेजें और बंद करें।


निम्नलिखित में जोड़कर उसी विशेषता को Zsh में सक्षम किया जा सकता है ~/.zshrc:

autoload -U edit-command-line
zle -N edit-command-line
bindkey '^xe' edit-command-line
bindkey '^x^e' edit-command-line

2
fcयदि FCEDIT वैरिएबल सेट किया गया है तो यह कमांड के साथ भी लागू किया जा सकता है। अच्छा उत्तर !
सेर्गेई कोलोडियाज़नी

1
@Serg धन्यवाद, हालांकि पिछली कमांड को fcखोलता है (जो एक निश्चित तरीके से भी पुराना है)। मैं उस के बारे में नहीं जानता था, धन्यवाद!
कोस

6

टर्मिनलों में कोई पाठ संपादन क्षमता नहीं है। टर्मिनल पाठ का एक क्षेत्र प्रदान करते हैं और कीबोर्ड को किसी चीज़ से जोड़ते हैं। लेकिन जो कुछ आप टर्मिनल के अंदर चलाते हैं वह निर्धारित करता है कि यह क्या कर सकता है।

शैल जैसे कि bashआम तौर पर पहली चीज है जो आपको टर्मिनल के अंदर चलाने के लिए मिलेगी। क्योंकि शेल कमांड के आधार पर काम करते हैं आप केवल वर्तमान कमांड को संपादित करने में सक्षम हैं। बॉर्न शेल की तुलना में उत्कृष्ट कमांड एडिटिंग प्रदान करता है cshया kshफिर यह शायद ही ऐसा कुछ है जिसे आप एक छोटी कहानी के साथ भी संपादित करना चाहते हैं।

टेक्स्ट एडिटर उन कमांड्स में से एक हैं जिन्हें आप शेल में इनवोक कर सकते हैं। प्रमुख उदाहरण और vimया emacsआपको लगभग कुछ भी संपादित करने की क्षमता देगा। दोनों में अंतर्निहित प्रोग्रामिंग वातावरण शामिल हैं जो भी आपकी समस्या का सामना करने की उनकी क्षमताओं का विस्तार करने के लिए।

तो समाधान बेहतर है कि ये उपकरण क्या कर रहे हैं और काम करने के लिए सही एक को लेने और चुनने का मतलब है ।


मुझे अंतर पता है, लेकिन क्या बाश के कमांड एडिटिंग को बेहतर बनाने के लिए कुछ किया जा सकता है?
यूनिवर्सली

1
एक स्क्रिप्ट में डाल दिया?
चूजों

0

आमतौर पर टर्मिनल माउस के साथ पाठ चयन की अनुमति देते हैं, लेकिन शेल को इसके बारे में जानकारी नहीं दी जाती है। तो दुर्भाग्य से न तो bash, zsh, fishऔर न ही esमाउस आधारित संपादन का समर्थन कर सकते हैं। मुझे लगता है कि ऐसा करने के लिए, उन्हें टर्मिनल पर अधिक नियंत्रण रखने की आवश्यकता होगी।

हालांकि (और यह है अगर आप विम या जाँचने खोलें, और फिर का उपयोग कर खोल आदेशों में प्रवेश एक खंड का एक सा):

:!...

तब आप अपने माउस को लाइन में कहीं भी कूदने के लिए क्लिक कर सकते हैं । (यदि आपको :set mouse=aपहले से सक्षम नहीं है तो आपको पहले इसकी आवश्यकता होगी ।) इस मोड में संपादन कुंजियों को देखा जा सकता है:help cmdline-editing

विम में एक शक्तिशाली कमांड इतिहास मोड भी है, जिसे मारकर पहुँचा जा सकता है q:। वहां से आप विम के नॉर्मल-मोड कमांड्स का इस्तेमाल करके याँक, डिलीट और पेस्ट कर सकते हैं। इस मोड में, आप सिलेक्ट-विथ-माउस प्राप्त कर सकते हैं और फिर अपनी इच्छित सुविधा (मार कर d) हटा सकते हैं ।

यहां एक महत्वपूर्ण चेतावनी यह है कि विम वास्तव में एक लाइव शेल सत्र चालू नहीं रखता है। आपके द्वारा निष्पादित प्रत्येक कमांड को एक चाइल्ड प्रोसेस में चलाया जाएगा। तो चाइल्ड प्रोसेस द्वारा पर्यावरण चर या शेल विकल्पों में किए गए किसी भी बदलाव को खो दिया जाएगा।

उस ने कहा, आप Vim प्रक्रिया के भीतर से पर्यावरण चर को संशोधित कर सकते हैं, और Vim की कमांड लाइन से इनका उपयोग कर सकते हैं, और उन्हें बाल प्रक्रियाओं में भी निर्यात किया जाएगा:

:let $FOO="bar"        " the $ and the quotes are mandatory here

:echo $FOO             " Vim's own echo command
bar

:!echo "$FOO"          " Passing the variable to a shell command
bar

:!bash                 " Opening a child shell
$ echo "$FOO"
bar

इसलिए यदि आप यह ढोंग करने को तैयार हैं कि विम वास्तव में किसी प्रकार का अजीब खोल है, तो आप इसकी उन्नत संपादन सुविधाओं का आनंद ले सकते हैं! संभवतः सबसे बड़ी कमी यह है कि आपको हर कमांड को :!या तो लिखकर शुरू करना होगाq:

ओह और वैसे, यदि आप शेल कमांड के आउटपुट को अपने वर्तमान विम बफर में प्राप्त करना चाहते हैं, तो आप ऐसा कर सकते हैं (लेकिन सावधान रहें यह आपकी वर्तमान लाइन को बंद कर देगा):

:,!ls
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.