मैंने कुछ दशकों के बैश के बाद पॉवर्सशेल पर स्विच किया है, और अपनी प्रोफ़ाइल के कुछ कॉन्फ़िगर करने के बाद (और पीएससीएक्स, ओपनएसएल और कुछ अन्य टूल्स को जोड़ने के बाद) मैं आम तौर पर खुश हूं।
एक बात जो मुझे बैश से याद आती है:
mkdir some-very-long-dir-name
cd (hit ESC then hit _ on the keyboard)
एस्केप अंडरस्कोर 'पिछली कमांड पर अंतिम आइटम' के लिए बैश है। यह बहुत उपयोगी है - इस पीछा में मुझे बहुत लंबी निर्देशिका नाम टाइप करने की ज़रूरत नहीं थी।
क्या पावरशेल में कीबोर्ड शॉर्टकट जोड़ना संभव है? कैसे?
यदि यह मायने रखता है तो मैं अपने टर्मिनल के रूप में ConEmu का उपयोग कर रहा हूं।
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
इसे अपने मौजूदा मोड में जोड़ने के लिए।
आपके ESC+_
समाधान का एक विकल्प, PowerShell
स्वचालित चर $$
में PSReadLine
(पूर्व-v5.0 या मॉड्यूल स्थापित किए बिना) की आवश्यकता के बिना समान जानकारी होती है।
PS C:\> Get-ChildItem -Path 'C:\'
...
PS C:\> $$
C:\
आप $^
चर के साथ प्रयुक्त कमांड को भी कैप्चर कर सकते हैं:
PS C:\> $^
get-childitem