स्क्रीन पर शब्दों का समापन VIM (बैश या Tmux) के रूप में


10

मैं स्क्रीन पर अंतिम मिलान पहचानकर्ता को पूरा करने के लिए बैश, Zsh या Tmux को कैसे कॉन्फ़िगर कर सकता हूं ? इस सामान्य परिदृश्य पर विचार करें:

$ git fetch
remote: Counting objects: 16, done.
remote: Compressing objects: 100% (9/9), done.
remote: Total 9 (delta 4), reused 0 (delta 0)
Unpacking objects: 100% (9/9), done.
From /opt/git/thunder
 * [new branch]      issue540   -> origin/issue547314
   e9204cf..4d42c3f  v2.1       -> origin/v2.1

मैं issue547सीएलआई पर आसानी से पूरा करने के लिए बैश / जेडश / टीएमएक्स कैसे प्राप्त कर सकता हूं ? जब मैं Git के Tabबाद मदद $ git checkout isकरने के लिए पूरी तरह से दबाता हूं issue, लेकिन मुझे अपने आप से अंकों को पूरा करना होगा, क्योंकि पिछले सभी अंक वास्तव में मौजूद Git शाखाओं से मेल खाते हैं

VIM में, सर्वव्यापी के लिए Ctrl+ दबाने Pपर पिछले मैच के रूप में पूरा हो जाएगा, इसलिए इस मामले issue547314में वास्तव में पूरा हो जाएगा। बश में, ज़श में या तमक्स में मुझे यह व्यवहार कैसे मिल सकता है ?

मैं वर्तमान में Ubuntu सर्वर (आमतौर पर 12.04 LTS) पर बैश 4.2 और Tmux 1.10 का उपयोग कर रहा हूं। यदि आवश्यक हो तो मैं नवीनतम उबंटू सर्वर एलटीएस (14.04) को अपडेट कर सकता हूं।

संपादित करें : मैं किसी भी समाधान को बुरा नहीं मानूंगा जो बैश, जेडश, या टमक्स का उपयोग करता है जब तक कि इसका उपयोग करना मुश्किल नहीं है। तो Tabया Ctrl+ Pया कुछ अन्य ऐसे शॉर्टकट ठीक होंगे, लेकिन Alt+ Meta+ Super+ Shift+ नहीं א


बहुत यकीन है कि यह बैश स्रोत का काफी बड़ा संशोधन करेगा।
केविन

@ केविन: मुझे उतना ही लगा, लेकिन उम्मीद है कि या तो कमाल का ज़िश इसे संभाल सकता है, या शायद tmux को।
१०:२५ पर डॉटनकोहेन

जवाबों:


4

मुझे लगता है कि ओपी को जिस सुविधा की तलाश है उसे Emacs world में dabbrev-Expand कहा जाता है:

उस संक्षिप्त नाम (v- विस्तार) से शुरू होने वाले शब्दों के लिए बफर में खोज करके बिंदु से पहले डायनेमिक एब्सर्व के रूप में बफर में शब्द का विस्तार करें।

xtermयह भी dabbrev-expandसुविधा है , लेकिन यह Emacs समकक्ष की तुलना में थोड़ा कम स्मार्ट है, लेकिन यह मेरे लिए बहुत उपयोगी है और एक कारण था जिसके लिए मैंने स्विच किया था xtermxtermविंडो के अंदर एक निर्दिष्ट स्ट्रिंग पर ~/.Xresourcesआह्वान करने के लिए निर्दिष्ट कस्टम कीबाइंडिंग का उपयोग किया जा सकता है dabbrev-expand। उदाहरण के लिए, मेरे पास मेरी प्रविष्टि है ~/.Xresources(मैं उपयोग करता हूं uxterm, xterm का एक यूनिकोड संस्करण):

UXTerm*VT100.Translations: #override \n\
     Meta <Key>/:dabbrev-expand() \n\

xtermखिड़की के अंदर मैं M-/( ALT + /) को आह्वान करने के लिए उपयोग कर सकता हूं dabbrev-expandxtermस्क्रीन पर दिखाई देने वाले सभी स्ट्रिंग्स को देखेंगे जो मेरे द्वारा लिखे गए अक्षरों से शुरू होते हैं। उदाहरण:

$ echo a_very_long_string bye by
$ a_v

अगर मैं दबाया जाता तो M-/अब इसका xtermविस्तार a_vहोता a_very_long_string। दुर्भाग्य से, जैसा कि मैंने कहा कि xtermइतना स्मार्ट नहीं है और इसकी dabbrev-expandविशेषता केवल पूर्ण स्ट्रिंग्स पर काम करेगी। तो, आपके मामले में isइसका विस्तार किया जाएगा issue540और issue547314इसलिए नहीं कि issue547314इसका एक हिस्सा है origin/issue547314( \bनियमित अभिव्यक्तियों के बारे में इसके बारे में सोचें , यह थोड़ा समान है, हालांकि अधिकांश नियमित अभिव्यक्ति इंजन issueतारों के दोनों घटनाओं को पकड़ लेंगे \bissue.+\b)। लेकिन , आप टाइप कर सकते हैं orऔर फिर प्रेस कर सकते हैं M-/xtermपहले का विस्तार होगा orकरने के लिए origin/v2.1, यह नहीं है कि हम क्या इसलिए प्रेस चाहते हैं M-/फिर से और xtermकरने के लिए इसे विस्तार होगा origin/issue547314। अब, यदि आप बैश का उपयोग करते हैं तो आप कर सकते हैं M-b,C-wऔर भाग C-eको हटाने के लिए origin/। सारांश में, dabbrev-expandअंदर xtermEmacs (और विम मुझे लगता है) में रूप में अच्छा के रूप में नहीं है बल्कि यह हाथ से लंबे तार और पुनर्लेखन की तुलना में तेजी अभी भी कम टाइपो की आशंका वाले। और ज्यादातर मामलों में यह अनावश्यक भागों को हटाने की आवश्यकता के बिना वांछित स्ट्रिंग तक सीधे विस्तार करेगा। आपको बस इसकी आदत डालने की जरूरत है - स्ट्रिंग को देखें जिसे आप कर्सर पर रखना चाहते हैं और देखें कि क्या यह किसी और चीज से पहले नहीं है, और यदि यह एक पूर्ववर्ती भाग है और विस्तार के बाद इसे हटा दें।

ध्यान दें कि डिफ़ॉल्ट रूप से सुविधा के xtermसाथ संकलित नहीं किया dabbrev-expandगया है और आपको इसे स्पष्ट रूप से सक्षम करना होगा। हालांकि, xtermउबंटू रिपॉजिटरी के संस्करण के साथ संकलित किया गया है dabbrev-expandऔर आप इसे तुरंत उपयोग कर सकते हैं।


धन्यवाद अर्काडियस, यह मुझे क्या जरूरत है के लिए काफी करीब लग रहा है। ध्यान दें कि मुझे यह काम करने के लिए नहीं मिल सकता है! शायद मेरे xtermऔर uxtermडबरेव-विस्तार के लिए संकलित नहीं किया गया है, मुझे इसमें सुविधा का कोई उल्लेख नहीं मिला -help। मैं संकलन के झंडे (जैसे vim --version) कैसे देख सकता हूं ? ध्यान दें कि मैं भी में config लाइन करने की कोशिश की ~/.Xresourcesके रूप में Meta <KeyPress> /: dabbrev-expand() \n\ के रूप में पाया यहाँ लेकिन यह मदद नहीं की, या तो।
मार्च को डॉटंचोहेन

यह हो सकता है कि आपका xterm बिना डबरा-विस्तार के संकलित किया गया हो। आपने xterm को कैसे स्थापित किया? बाद में संशोधन ~ / .Xresources xrdb -merge .Xresourcesxterm में करते हैं।
अर्कादियुस ड्राज्स्की

यह सबसे निश्चित रूप से यह, Arkadiusz किया था! धन्यवाद!
डॉटान्चेन

मैं इस प्रश्न को कुछ और घंटे देने जा रहा हूं जब तक कि बाउंटी अवधि समाप्त नहीं हो जाती, लेकिन मुझे पूरा यकीन है कि आप एक जूता-इन हैं। एकमात्र समस्या xterm की आवश्यकता है, जो भयानक है! लेकिन अब जब मैं इस सुविधा के लिए उचित नाम जानता हूं तो मैं इसे अन्य अनुप्रयोगों के लिए Google कर सकता हूं । धन्यवाद!
डॉटान्चेन

धन्यवाद अर्कादिअस! हालाँकि मैं xterm समाधान का उपयोग नहीं कर रहा हूँ, आपने निश्चित रूप से मुझे सही दिशा में इंगित किया है। स्पष्ट रूप zshसे यह सुविधा है।
dotancohen

1

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

उदाहरण

यदि मैं टाइप करके शुरू करता हूं lsऔर फिर Tabदो बार हिट करता हूं, तो आप जो भी कमांड का उपयोग करने का प्रयास कर रहे हैं उसकी मिलान फ़ाइलों (और कमांड लाइन स्विच) की एक सूची प्रदान करने के लिए आपको बैश मिलेगा:

$ ls <---- hit Tab x 2
Display all 232 possibilities? (y or n)

और यहाँ स्विच के साथ उदाहरण दिया गया है:

$ ls -- <---- hit Tab x 2
--all                 --format=                                  --quote-name
--almost-all          --group-directories-first
....
....

सेट अप?

मेरी स्थापना में पहले से ही एक नियम शामिल था git:

/etc/bash_completion.d/git

इस फ़ाइल की स्थापना तब की गई थी जब मैंने gitपैकेज स्थापित किया था । मैं फेडोरा 19 पर हूं, लेकिन अन्य डिस्टरो को भी ऐसा करना चाहिए।

$ rpm -qf /etc/bash_completion.d/git
git-1.8.3.1-1.fc19.x86_64

नियम फ़ाइल को देखते हुए यह बताता है कि यह निम्नलिखित स्थितियों में स्वतः पूर्णता की सुविधा प्रदान करेगा:

# The contained completion routines provide support for completing:
#
#    *) local and remote branch names
#    *) local and remote tag names
#    *) .git/remotes file names
#    *) git 'subcommands'
#    *) tree paths within 'ref:path/to/file' expressions
#    *) file paths within current working directory and index
#    *) common --long-options
#

तो यह आपके लिए "बस काम" होना चाहिए।


2
बैश समापन और गिट पूरा होने का काम (जैसा कि मैं ओपी में उल्लेख करता हूं)। जो परिवर्तन मैं करना चाहूंगा, वह यह है कि इसे पहले टैब पर पूरा किया जाए और स्क्रीन पर दिखाए गए अंतिम कानूनी मूल्य को दबाएं। यह कैसे VIM Omnicompletion काम करता है।
डॉटनचेन

@dotancohen - मैं अब यह नहीं देखता कि जो मैंने वर्णित किया है उससे आगे संभव होगा।
slm

1

आप एक्स्ट्राको के साथ कुछ ऐसा कर सकते हैं :

  • prefix + tabएक्स्ट्राको शुरू करने के लिए tmux दबाएँ
  • फजी पाठ / पथ / यूआरएल खोजें
  • दबाएँ
    • tab इसे वर्तमान फलक में सम्मिलित करने के लिए,
    • enter इसे क्लिपबोर्ड पर कॉपी करने के लिए,
    • ctrl-o रास्ता खोलने के लिए / url या
    • ctrl-e के साथ संपादित करने के लिए $EDITOR
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.