我已经使用 bash 大约十年了,已经习惯了输入 !$ 来重复最后一个参数,例如:
$ mkdir foo
$ cd !$
cd foo
(最后一行由 shell 打印出来,告诉您命令的结果是什么)。同样,我经常看到以下内容:
$ make_sandwich
-bash: make_sandwich: Permission denied
$ sudo !!
sudo make_sandwich
我非常喜欢 fish shell,但我的肌肉记忆已经相当牢固了。fish 中有对应的功能吗?我可以配置 fish 以使用相同的命令吗?
答案1
Alt-Up arrow为您提供上一个命令的最后一个参数。后续推送将循环显示之前的参数。
我还没有找到令人满意的等价物!!
,Up除了Ctrl-A
答案2
我在fish-users 邮件列表. 将其添加到您的config.fish
文件中:
function bind_bang
switch (commandline -t)[-1]
case "!"
commandline -t -- $history[1]
commandline -f repaint
case "*"
commandline -i !
end
end
function bind_dollar
switch (commandline -t)[-1]
case "!"
commandline -f backward-delete-char history-token-search-backward
case "*"
commandline -i '$'
end
end
function fish_user_key_bindings
bind ! bind_bang
bind '$' bind_dollar
end
重启 fish。现在,当你输入 时!!
,它将自动替换为最后一个命令。当你输入 时!$
,它将自动替换为最后一个命令的最后一个参数。
答案3
为了sudo !!
在 fish shell(版本 3.1b1 及更高版本)中,您可以使用绑定(默认情况下__fish_prepend_sudo
为Alt+)S在当前存在的命令行前面添加sudo
:
$ make sandwich▎
Alt+S
$ sudo make sandwich▎
从 fish 3.2.0 开始,在空行上按Alt+将从历史记录中提取最新的行并添加在前面。在 3.2.0 之前,您首先需要通过以下方式从历史记录中提取最新的行Ssudo
答案4
我遇到了和你一样的问题,并且我通过使用 oh-my-fish
(它是 shell 的插件管理器fish
)解决了这个问题https://github.com/oh-my-fish/oh-my-fish。你可以用以下命令安装它:
curl -L https://get.oh-my.fish | fish
bang-bang
然后使用以下命令安装插件:
omf install bang-bang