मैंने कुछ दशकों के बैश के बाद पॉवर्सशेल पर स्विच किया है, और अपनी प्रोफ़ाइल के कुछ कॉन्फ़िगर करने के बाद (और पीएससीएक्स, ओपनएसएल और कुछ अन्य टूल्स को जोड़ने के बाद) मैं आम तौर पर खुश हूं।

एक बात जो मुझे बैश से याद आती है:

mkdir some-very-long-dir-name
cd (hit ESC then hit _ on the keyboard)

एस्केप अंडरस्कोर 'पिछली कमांड पर अंतिम आइटम' के लिए बैश है। यह बहुत उपयोगी है - इस पीछा में मुझे बहुत लंबी निर्देशिका नाम टाइप करने की ज़रूरत नहीं थी।

क्या पावरशेल में कीबोर्ड शॉर्टकट जोड़ना संभव है? कैसे?

यदि यह मायने रखता है तो मैं अपने टर्मिनल के रूप में ConEmu का उपयोग कर रहा हूं।

3
mikemaccana 2 नवम्बर 2017, 18:43

2 जवाब

सबसे बढ़िया उत्तर

संक्षिप्त जवाब:

 Set-PSReadlineKeyHandler -Key 'Escape,_' -Function YankLastArg

लंबी व्याख्या:

PSReadLine को इंगित करने के लिए @davidbrabant और @ TheIncorrigible1 को धन्यवाद: यह स्वयं उत्तर नहीं है, लेकिन यह समझना कि PSReadLine कैसे काम करता है, इसे हल करने की कुंजी है।

हालांकि vi प्रत्येक Linux वितरण पर डिफ़ॉल्ट संपादक है, बैश का डिफ़ॉल्ट emacs संपादन मोड है। बैश डॉक्स से:

Emacs और vi संपादन मोड के बीच अंतःक्रियात्मक रूप से स्विच करने के लिए, 'set -o emacs' और 'set -o vi' कमांड का उपयोग करें (सेट बिल्टिन देखें)। रीडलाइन डिफ़ॉल्ट emacs मोड है।

जिसका अर्थ है 'एस्केप अंडरस्कोर' emacs से आता है।

अजीब तरह से, PSReadLine, बैश के विपरीत, डिफ़ॉल्ट रूप से emacs मोड का उपयोग नहीं करता है। PSREADLine डॉक्स से:

Emacs कुंजी बाइंडिंग का उपयोग करने के लिए, आप इसका उपयोग कर सकते हैं: Set-PSReadlineOption -EditMode Emacs

यह बहुत स्पष्ट नहीं है, लेकिन इसका मतलब है कि दूसरा मोड डिफ़ॉल्ट है। इसकी पुष्टि करते हुए, चल रहा है:

get-PSReadlineOption

रिटर्न:

EditMode                               : Vi

तो दो समाधान हैं:

समाधान 1: मोड बदलें

Set-PSReadlineOption -EditMode Emacs

आप Get-PSReadlineKeyHandler के साथ प्रभाव देख सकते हैं जिसमें मानक एस्केप अंडरस्कोर शॉर्टकट शामिल है:

Escape,_         YankLastArg                   Copy the text of the last argument to the input

एस्केप अंडरस्कोर अब काम करता है।

समाधान 2: अपने मौजूदा मोड में शॉर्टकट जोड़ें

मोड बदलने के बजाय (यह पता चला है कि मुझे vi कीबाइंडिंग पसंद है!), आप भी चला सकते हैं:

 Set-PSReadlineKeyHandler -Key 'Escape,_' -Function YankLastArg

इसे अपने मौजूदा मोड में जोड़ने के लिए।

4
mikemaccana 3 नवम्बर 2017, 22:04

आपके ESC+_ समाधान का एक विकल्प, PowerShell स्वचालित चर $$ में PSReadLine (पूर्व-v5.0 या मॉड्यूल स्थापित किए बिना) की आवश्यकता के बिना समान जानकारी होती है।

PS C:\> Get-ChildItem -Path 'C:\'

...

PS C:\> $$

C:\

आप $^ चर के साथ प्रयुक्त कमांड को भी कैप्चर कर सकते हैं:

PS C:\> $^

get-childitem
2
Maximilian Burszley 2 नवम्बर 2017, 19:34