假设我有一个目录,其中包含一些文件,如下所示:
$ ls
file1 file2 file3
我想在 Bash 中做一些制表符补全:
$ cat file<tab>
file1 file2 file3
我记得看到有人使用制表符补全,然后 shell 将后面的部分加粗,所以在这种情况下,它会将文件名的1
,2
和加粗3
,所以它看起来像这样:文件1 文件2文件3
它将告诉您下一步应该输入什么。
我认为这是的一个功能zsh
,但是有没有什么办法可以实现它呢bash
?
答案1
我不知道直接移植的功能,但有一种方法可以解决这个问题bash
。可编程完成允许您指定当您按下依赖于调用程序的 Tab 键时您想要看到的内容,允许(作为一个流行的例子)ssh
[tab] 显示自动完成选项~/.ssh/known_hosts
。
以下是一些有用的资源:
当然,要复制上面指定的功能,您必须认真研究完成的可编程方面并编写自己的函数。Ubuntu 附带一套自己的用户贡献的完成内容,这是一个很好的起点。
答案2
在基于 Red Hat 的发行版中,有一个 bash-completion 软件包。此软件包会将 /etc/bash_completion.d/ 目录中的某些程序的特定补全行为填入其中。我在 Fedora、Red Hat 和 CentOS 下使用它。
yum install bash-completion
答案3
我使用它是tcsh
因为有类似的功能。
这是我的 /etc/csh.cshrc 文件:
if ($?tcsh && $?prompt) then
bindkey "\e[1~" beginning-of-line # Home
bindkey "\e[7~" beginning-of-line # Home rxvt
bindkey "\e[2~" overwrite-mode # Ins
bindkey "\e[3~" delete-char # Delete
bindkey "\e[4~" end-of-line # End
bindkey "\e[8~" end-of-line # End rxvt
bindkey -k up history-search-backward
bindkey -k down history-search-forward
set filec
set prompt="[%B%m%b:%~] %n%# "
set complete = enhance # important line
set autolist # important line too
alias ls 'ls -hA --color'
alias ll 'ls -l'
endif