经过几十年的bash,我已经切换到Powershell,在配置了我的个人资料(并添加了PSCX,openssl和其他一些工具)后,我一般都很开心。
我想念bash的一件事:
mkdir some-very-long-dir-name
cd (hit ESC then hit _ on the keyboard)
Escape下划线是“前一个命令的最后一项”的bash。它非常有用 - 在这个追逐中,我没有输入很长的目录名。
是否可以向PowerShell添加键盘快捷键?怎么样?
如果重要的话,我正在使用ConEmu作为我的终端。
答案 0 :(得分:3)
Set-PSReadlineKeyHandler -Key 'Escape,_' -Function YankLastArg
感谢@davidbrabant和@TheIncorrigible1指向PSReadLine:它不是答案本身,但了解PSReadLine如何工作是解决这个问题的关键。
虽然vi
是每个Linux发行版的默认编辑器,但bash的默认编辑模式为emacs
。来自the bash docs:
要在emacs和vi编辑模式之间交互切换,请使用'set -o emacs'和'set -o vi'命令(请参阅Set Builtin)。 Readline默认为emacs模式。
这意味着'逃避下划线'来自emacs。
奇怪的是,PSReadLine与bash不同,默认情况下不会使用emacs模式。来自the PSREADLine docs:
要使用Emacs键绑定,您可以使用: Set-PSReadlineOption -EditMode Emacs
它不是很明确,但这意味着另一种模式是默认的。确认,运行:
get-PSReadlineOption
返回:
EditMode : Vi
所以有两种解决方案:
Set-PSReadlineOption -EditMode Emacs
您可以看到Get-PSReadlineKeyHandler
包含标准转义下划线快捷键的效果:
Escape,_ YankLastArg Copy the text of the last argument to the input
逃脱下划线现在有效。
而不是改变模式(事实证明我喜欢vi keybindings!),你也可以运行:
Set-PSReadlineKeyHandler -Key 'Escape,_' -Function YankLastArg
将其添加到现有模式。
答案 1 :(得分:2)
作为ESC+_
解决方案的替代方案,PowerShell
自动变量$$
包含相同的信息,而无需PSReadLine
(v5.0之前或没有模块)安装)。
PS C:\> Get-ChildItem -Path 'C:\'
...
PS C:\> $$
C:\
您还可以捕获与$^
变量一起使用的命令:
PS C:\> $^
get-childitem