【问题标题】:Matlab-like command history retrieval in unix command line在 unix 命令行中类似 Matlab 的命令历史检索
【发布时间】:2010-08-20 22:03:29
【问题描述】:

在 Matlab 中,有一个我喜欢的非常好的功能。假设我输入了命令very-long-command,然后输入了几个命令。然后稍后如果我再次需要长命令,我只需输入very 并按向上箭头键,我的长命令就会出现。它找到最后一个以very 开头的命令。我不能在 unix 命令行中做同样的事情,当我尝试这样做时,它会忽略我输入的任何内容,并按时间顺序返回到最后一个命令。有办法吗?

【问题讨论】:

  • Matlab 有很好的默认设置。我一直想知道为什么 Unix 的人不能为这些东西提供好的默认设置。

标签: matlab unix


【解决方案1】:

在 bash 中,此功能由命令 history-search-forward 和 history-search-backward 提供,默认情况下它们不绑定到任何键(请参阅here)。如果你跑

bind '"\e[A":history-search-backward'
bind '"\e[B":history-search-forward'

它将在历史记录中向上和向下箭头搜索当前行的开头和该点之间的字符串。另见this related Stack Overflow question

【讨论】:

    【解决方案2】:

    在 bash 中,点击 ctrl-r 可以进行历史搜索:

    $ echo 'something very long'
    something very long
    $ # blah
    $ # many commands later...
    (reverse-i-search)`ec': echo 'something very long'
    

    在上面的sn-p中,我在# many commands later...之后的下一行点击ctrl-r,然后输入ec 这让我回到了 echo 命令。此时点击 Enter 将执行命令。

    【讨论】:

    • 谢谢!我还有一个小问题,如果最近使用了两个以 echo 开头的长命令怎么办,我如何使用这种方法在两者之间切换?
    • @AgCl: This blog post 解释了如何设置 history-search-forwardhistory-search-backward 以浏览历史记录。
    • 以上链接失效
    【解决方案3】:

    您可以使用“!”来做同样的事情。例如:

     $ echo "Hello"
     Hello
     $ !echo
     echo "Hello"
     Hello
    

    然而,做这种事情通常是个坏主意(如果最后一个命令做了破坏性的事情怎么办?)。如果您希望自己会重用某些东西,那么我建议您创建一个 shell 脚本并将其保存在某个地方(每当我打算重用某些东西时,我都会在 ~/.local/bin 中创建一个脚本)。

    【讨论】:

    • 谢谢,它几乎与 Matlab 的一样接近,但在按 Enter 之前我看不到整个命令。当我有足够的代表时,我会投票赞成答案。
    • !echo:p 将显示命令(无论如何都是bash),您可以选择是否执行它。
    猜你喜欢
    • 2012-01-23
    • 2011-06-16
    • 1970-01-01
    • 1970-01-01
    • 2011-08-09
    • 2014-02-26
    • 2014-05-11
    • 1970-01-01
    • 2023-04-08
    相关资源
    最近更新 更多