如何使终端根据先前输入的命令自动完成?

如何使终端根据先前输入的命令自动完成?

使用终端时,按向上和向下键循环按时间顺序输入的先前的命令是正常的。

我从一个网站上了解到如何通过按下向上和向下时根据先前输入的命令自动完成我在光标处输入的内容来添加该行为。

例如,假设我按以下顺序输入以下命令:

  1. ls Videos
  2. ls Vids
  3. lsomething
  4. ls Videos/Funny/Old
  5. vi file
  6. ls Music

如果我没有输入任何内容,按向上和向下键将像平常一样循环遍历所有行。但是,如果我输入了ls,按向上和向下键将循环遍历前 2 个字符的所有命令ls(上面的第 1、2、3、4、6 行)。但是输入ls(后面有一个空格)只会让向上和向下循环遍历第 1、2、4、6 行。同样,ls Vid让箭头循环遍历第 1、2、4 行,但ls Videos只允许在第 1 行和第 4 行之间循环。

它非常有用,可以完成需要反复输入的命令的特定值,而不必循环输入每个不相关的命令。例如,我正在尝试测试env诸如语言环境之类的值对事物的影响:

env [many different values] [command]
[insert many different commands here]
env [slightly different values from before] [command]
[doing other stuff]

我只需要在输入后按几次就env可以在尝试过的值之间循环。

如果描述起来有点长,我深表歉意。我不知道它叫什么。我的终端曾经有这种行为,但它们似乎已经失去了它,我找不到我从中学到它的那个网站。我认为这与编辑有关~/.bashrc

答案1

为了获得您想要的行为,请将以下行添加到您的文件中~/.inputrc(如果文件不存在,则创建文件):

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

/etc/inputrc然后,打开一个新终端,它将按预期工作。此行为由和中的设置控制~/.inputrc。您可以在Readline Command Names部分中阅读更多有关它们的信息man bash

   non-incremental-forward-search-history (M-n)
          Search forward  through  the  history  using  a  non-incremental
          search for a string supplied by the user.
   history-search-forward
          Search  forward through the history for the string of characters
          between the start of the current line and the point.  This is  a
          non-incremental search.

相关内容