bash:基于历史的智能自动完成?

flo*_*fan 26 bash autocomplete

我曾经发现了一个很棒的 bash 选项,但现在我不记得如何重新启用它。

它扩展了自动完成功能以查看您最近的历史记录。因此,如果您之前输入过open index.html然后open map.html输入

$ op
Run Code Online (Sandbox Code Playgroud)

并按Tab一次将自动完成到open map.html. 再次按下Tab将自动完成到open index.html

有谁知道我如何重新启用它?

Noa*_*nos 24

在你的 bash 中运行:

cat >> ~/.inputrc <<'EOF'
"\e[A": history-search-backward
"\e[B": history-search-forward
EOF
Run Code Online (Sandbox Code Playgroud)

重新登录到 ssh 会话,或者简单地重新加载 inputrc:

bind -f  ~/.inputrc
Run Code Online (Sandbox Code Playgroud)

现在使用输入命令的开头后 - 它将从历史记录中自动完成。


joe*_*eey 11

根据Ubuntu 博客上的这个页面(“打开 Bash 智能完成”),它就像编辑bash.bashrc文件一样简单。为了清楚起见,我以更适合初学者的方式重写了下面的这些说明。

说明 (Linux)

  1. 在终端窗口中,编辑系统bash.bashrc文件。要使用命令行文本编辑器(如nano)执行此操作,请执行命令sudo nano /etc/bash.bashrc(如果需要,请输入您的密码)。

  2. 使用箭头键找到这些行:

    #if [ -f /etc/bash_completion ]; then
    #   . /etc/bash_completion
    #fi
    
    Run Code Online (Sandbox Code Playgroud)
  3. 取消注释每一行(通过删除#每行的前缀)。

  4. 保存文件(在 nano 中通过按Ctrl+oEnter,然后按Ctrl+x退出),它现在应该可以工作了。请注意:要使更改在现有终端中生效,/etc/bash.bashrc需要采购。或者,注销并再次登录,或者只是重新启动。

要禁用它,您需要做的就是重新注释上面的每一行(通过#在每行的开头添加一个)。

据推测,如果您将上述三行(减去它们的#字符)插入到您的个人.bashrc文件中,上述内容也将适用(对于您的用户帐户)。如果你这样做,你就不需要使用sudo.


根据这篇博文(“Bash Completion for Mac OS X”),Mac OS X 的说明有所不同。这是您需要做的。

说明 (Mac OS X)

  1. 确保已安装Homebrew,然后使用它来安装软件包bash-completion(通过键入命令brew install bash-completion)。

  2. Homebrew 现在应该会告诉您完成安装需要做什么。在这种情况下,您需要将这三行添加到您的.bashrc文件中(使用我们上面使用的类似 nano 的命令行文本编辑器或图形编辑器):

    if [ -f $(brew --prefix)/etc/bash_completion ]; then
       . $(brew --prefix)/etc/bash_completion
    fi
    
    Run Code Online (Sandbox Code Playgroud)
  3. 您现在应该可以在 bash 中自动完成。请注意:为使更改生效在现有的炮弹效果,.bashrc需要进行采购。或者,注销并再次登录,或者只是重新启动。

要禁用它,您需要做的就是删除我们上面添加的行,然后运行命令brew uninstall bash-completion --force


小智 9

我没有足够的声誉来发表评论,所以我在 Ubuntu 18.04 中添加了一个答案,这就是我所做的(在 shell 中获得向上和向下箭头的自动完成)

  • 编辑~/.bashrc
  • 添加这两行(接近末尾)
绑定 '"\e[A": 向后搜索历史记录'
绑定 '"\e[B": 历史搜索向前'
  • 重新加载bash;(或者离开航站楼然后再回来)