有没有办法只需按下一组键就可以回到鱼壳中准备进入的命令?

时间:2017-03-20 21:52:46

标签: shell fish

有时候我有一个命令准备按下回车但是那个命令我已经用某种方式改变了它并且它是一个很长的命令,然后我记得我必须打开一个文本文件(例如获取一些信息)我将在命令中使用)。所以我做的大部分时间是取消该命令(Ctrl + C),然后打开文本文件获取我需要的信息,然后再次使用文本文件中的粘贴值重新键入命令。这对我来说效率不高,如果服务器没有任何类型的GUI,我无法复制上一个命令,所以我不会丢失它。

所以我的问题是,是否有任何类型的组合键可用于保存准备进入的命令,所以我不会丢失它而且我不必再次输入它?

谢谢!

2 个答案:

答案 0 :(得分:1)

目前无法开箱即用。

最简单的方法可能是

  • 更改取消绑定以存储命令行

  • 添加绑定以调用隐藏的命令行

它的工作原理如下:

召回的功能:

function recall_commandline
    if set -q stashed_commandline
        commandline -r -- $stashed_commandline
    end
end

添加到__fish_cancel_commandline(使用funced __fish_cancel_commandline。一旦您满意,请执行funcsave __fish_cancel_commandline):

set -g stashed_commandline $cmd
# right before:
commandline ""

添加到fish_user_key_bindings

bind \cr recall_commandline

这将允许您按Ctrl + r调用上次取消的命令行。将它扩展为多个是非常重要的(因为"命令行"可以有多行),就像将命令行添加到历史记录中一样,以便可以使用普通绑定来调用它们。

答案 1 :(得分:1)

我有以下功能来改变注释/取消注释当前语句:

with open('HOME/.bashrc', 'w') as f:
        w = "echo [Local weather]:", wx_t,"F", "with", wx_c
        i = "echo [Your public IP is]:", ip
        out = [str(w), str(i)]
        f.write('\n'.join(out[0:-3]))  

我这样绑定它:function toggle-comment-cmd-buffer --description 'Comment/Uncomment the current or every line' set -l cmdlines (commandline -b) if test "$cmdlines" = "" return end set -l cmdlines (printf '%s\n' '#'$cmdlines | string replace -r '^##' '') commandline -r $cmdlines string match -q '#*' $cmdlines[1]; and commandline -f execute end 。通过这种方式,我可以快速评论并将当前语句放在我的命令历史记录中,以便执行其他操作。然后我可以回想起评论并再次按bind \e\# toggle-comment-cmd-buffer删除评论字符并继续修改命令。

我在我的个人配置中设置了这个,因为我习惯于在ksh93中做类似的事情。