如何将终端中的 Tab 键自动完成功能扩展为命令中间的文本?

如何将终端中的 Tab 键自动完成功能扩展为命令中间的文本?

示例文件:Selection_192.png

  1. $ ls 192
  2. 现在我按Tab两次
  3. 它应该自动完成$ ls Selection_192.png

笔记:

它不仅可以与ls任何类型的命令一起工作,而且最好是与 Ubuntu Unity 16.04 中的默认 shell 一起工作的解决方案。

答案1

由于您没有提到具体的 shell,因此一种方法是安装zsh

sudo apt-get install zsh
# now change the default shell
chsh -s /usr/bin/zsh
sudo chsh -s /usr/bin/zsh

现在,您已将 zsh 作为默认 shell,而不是 bash,要获得模糊完成,请将其添加到~/.zshrc文件:

zstyle ':completion:*' matcher-list '' \
  'm:{a-z\-}={A-Z\_}' \
  'r:[^[:alpha:]]||[[:alpha:]]=** r:|=* m:{a-z\-}={A-Z\_}' \
  'r:|?=** m:{a-z\-}={A-Z\_}'

例如,我的样子如下~/.zshrc

 # bash style (read as the adequate) for navigating words
 autoload -U select-word-style
 select-word-style bash

 # some plugins
 source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
 source ~/.zsh/zsh-autosuggestions/zsh-autosuggestions.zsh
 ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE='fg=7'
 zstyle ':completion:*' matcher-list '' \
         'm:{a-z\-}={A-Z\_}' \
         'r:[^[:alpha:]]||[[:alpha:]]=** r:|=* m:{a-z\-}={A-Z\_}' \
         'r:|?=** m:{a-z\-}={A-Z\_}'
 bindkey \^U backward-kill-line

 #useful aliases
 alias grep1="grep --exclude-dir=\".*\""
 alias gdb="gdb -q"

注意::zsh 的用处在于它非常可扩展,并且在许多方面与 bash 兼容。相反,例如 fish(bash 的另一种替代品,与配置好的 zsh 非常相似)根据我的经验,这会导致许多不兼容问题。

更新型多巴胺:根据 OP 评论:如果你想提高字母彼此接近的要求(即,它不是模糊完成,而只是一个子序列完成), 然后反而我提到的正则表达式你可以输入~/.zshrc此代码

zstyle ':completion:*' completer _complete
zstyle ':completion:*' matcher-list '' 'm:{[:lower:][:upper:]}={[:upper:][:lower:]}' '+l:|=* r:|=*'
autoload -Uz compinit
compinit

相关内容