在 fish shell 中,bash 的 !$ 和 !! 相当于什么?

在 fish shell 中,bash 的 !$ 和 !! 相当于什么?

我已经使用 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。现在,当你输入 时!!,它将自动替换为最后一个命令。当你输入 时!$,它将自动替换为最后一个命令的最后一个参数。

进一步讨论在 fish 的 github wiki 上

答案3

为了sudo !!

在 fish shell(版本 3.1b1 及更高版本)中,您可以使用绑定(默认情况下__fish_prepend_sudoAlt+)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 

相关内容