Vi- मोड में बैश में अंतिम कमांड का अंतिम पैरामीटर


19

मैं vi मोड में अपने प्यारे बैश का उपयोग करने के लिए (स्टैक ओवरफ्लो पर) आश्वस्त हूं। अब तक मुझे इसकी काफी आदत थी और मुझे यह पसंद है।

हालांकि मैं वास्तव में एक विशेषता को याद करता हूं: एमएसीएस-मोड में, आप "ईएससी" दबाकर पिछले कमांड के अंतिम पैरामीटर दर्ज कर सकते हैं। (यह है, प्रेस भागने के बाद।)

क्या vi- मोड में अंतिम पैरामीटर डालने के लिए एक डिफ़ॉल्ट बाइंडिंग है? मैं एक खोजने में सक्षम नहीं था और मैं वास्तव में इस आदेश को याद करता हूं ...

जवाबों:


9

कोई डिफ़ॉल्ट नहीं है। जब आप vi मोड पर जाते हैं तो 'yank-last-arg' ('bind -p' द्वारा सूचीबद्ध) के लिए बाइंडिंग गायब हो जाती है।

bind '"\e."':yank-last-arg

आपको वही वापस बाँध देगा (या कुछ और लेने के लिए)


1
क्लोन के लिए zshbindkey "\e." insert-last-word
jhvaras

मैं इसे वर्षों से zsh पर देख रहा हूं और हर बार मुझे bash का उपयोग करने के लिए मजबूर किया जाता है (जैसे काम पर एक सर्वर पर) मैं यह भूलता रहता हूं कि मुझे कभी भी यह पता नहीं चला है कि इसे bash पर कैसे सेट किया जाए। अब और नहीं! के साथ संयोजन में यह history-search-backwardsगंभीर कमांड लाइन उपयोगकर्ताओं के लिए अमूल्य है।
श्रीधर सरनोबत

11

वहाँ (vi-yank-arg), डिफ़ॉल्ट रूप से "_" मैप किया गया है। आपको वही करना चाहिए जो आप चाहते हैं (कमांड मोड में)।


+1। मुझे यकीन नहीं है कि यह उत्तर क्यों स्वीकार नहीं किया गया।
सत्यम

7

बिल्कुल वैसा ही नहीं, लेकिन किसी भी मोड में आप टाइप कर सकते हैं !$, और इसे पिछले कमांड के अंतिम शब्द से बदल दिया जाएगा। नियमावली में ऐसी और बातें खोजें ।


एक उत्थान प्राप्त करने के लिए पर्याप्त बंद करें, लेकिन बिल्कुल समान नहीं ... मैं इसे निष्पादित करने से पहले लाइन को संपादित करने की संभावना को याद करता हूं। लेकिन वैसे भी बहुत बहुत धन्यवाद!
मो।

5

~ / .Inputrc फ़ाइल कुंजी नक्शा कॉन्फ़िगर कर सकते हैं (आप मैन्युअल से यह उत्पन्न कर सकते हैं अगर यह नहीं पाया जा सकता है)। निम्नलिखित कमांड को ~ / .inputrc में जोड़ें :

"\e.": yank-last-arg
"\e_": yank-last-arg

मेरा ~ / .inputrc है:

set completion-ignore-case on
set show-all-if-ambiguous on
set show-all-if-unmodified on

set editing-mode vi
set keymap vi-insert

"\C-p": previous-history
"\C-n": next-history
"\C-a.":beginning-of-line
"\C-e.":end-of-line

"\e.": yank-last-arg
"\e_": yank-last-arg

आप रीडलाइन और bind -pयहाँ के बारे में विवरण पा सकते हैं : http://linux.about.com/library/cmd/blcmdl3_readline.htm

और बैश और रीडलाइन VI एडिटिंग मोड चीट शीट में वी के कीब्लिंग के बारे में कुछ जानकारी


3

अपने .bashrc के अंदर, इन्हें जोड़ें:

set -o vi
bind -m vi-command ".":insert-last-argument
bind -m vi-insert "\C-l.":clear-screen
bind -m vi-insert "\C-a.":beginning-of-line
bind -m vi-insert "\C-e.":end-of-line
bind -m vi-insert "\C-w.":backward-kill-word

ये न केवल ESC-dot - बल्कि Ctrl-A, Ctrl-E, Ctrl-W और Ctrl-L के डिफ़ॉल्ट व्यवहार को पुनर्स्थापित करेंगे। आप इसलिए सामान्य बैश vi- मोड का आनंद ले सकते हैं और फिर भी उन शॉर्टकट्स का उपयोग कर सकते हैं जिन्हें आप जानते हैं और प्यार करते हैं। यदि आपको अधिक क्रियाओं की आवश्यकता है, तो आपको अपनी ज़रूरत की रीडलाइन कार्रवाई का नाम खोजने के लिए "मैन बैश" की जाँच करें (जैसे "स्पष्ट-स्क्रीन", "अंत-पंक्ति", आदि)।


0

आप $_पिछली कमांड के अंतिम तर्क को संदर्भित करने के लिए उपयोग कर सकते हैं ।

नुकसान हैं:

  1. दर्ज करने से पहले आप यह सत्यापित नहीं कर सकते हैं कि सम्मिलित की गई चीज़ वह चीज़ है जिसे आप सम्मिलित करना चाहते हैं।

  2. यदि आप PROMPT_COMMAND या DEBUG ट्रैप का उपयोग करते हैं (मुझे यकीन नहीं है जो, वास्तव में, समस्या का कारण बनता है; मेरे पास फैंसी सामान करने के लिए मेरे पास दोनों .bashrc है) जैसे चल रहे कमांड को xterm शीर्षक में रखें, यह क्लोबर होगा $_

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