zsh shell 是否存在模糊匹配模式?

sp3*_*tum 26 zsh autocomplete

我最近爱上了高效的文本完成系统。我最喜欢的一种完成方式是所谓的模糊完成。在这种模式下,程序将仅根据文件名或路径中“任何地方”(几乎)出现的几个字符来完成用户的输入。此功能至少存在于以下程序中:

此模式在文本编辑器中的使用示例:

用户正在尝试完成单词 longWordNameThatTheyDontWantToWriteByHand,他们可以通过键入例如第一个字母和一些大写字母来完成。所以输入lwnt可以完成整个单词。

我的问题是:是否有一种模式或类似的东西可以与 zsh shell 一起使用?

Pyt*_*Nut 34

我有这个 .zshrc

# 0 -- vanilla completion (abc => abc)
# 1 -- smart case completion (abc => Abc)
# 2 -- word flex completion (abc => A-big-Car)
# 3 -- full flex completion (abc => ABraCadabra)
zstyle ':completion:*' matcher-list '' \
  'm:{a-z\-}={A-Z\_}' \
  'r:[^[:alpha:]]||[[:alpha:]]=** r:|=* m:{a-z\-}={A-Z\_}' \
  'r:|?=** m:{a-z\-}={A-Z\_}'
Run Code Online (Sandbox Code Playgroud)

它为zsh的完成引擎添加了完全模糊匹配。它缺乏 sublime text 的超级智能,但是,是的,它会完成lwnt -> longWordNameThatTheyDontWantToWriteByHand

  • @Hi-Angel 嘿,感谢您提出这个问题。我现在实际上使用 `'r:|?=** m:{az\-}={AZ\_}'` ,它更简单,并且不会遇到您描述的问题。 (7认同)

Jun*_*hoi 17

查看我的项目fzf

这是一个用 Golang 编写的通用模糊查找器,可用于任何事物列表:文件、进程、命令历史、git 分支等。

对于 zsh,它提供以下键绑定:

  • CTRL-T - 将选定的文件路径粘贴到命令行中
  • CTRL-R - 将历史中选定的命令粘贴到命令行中
  • ALT-C - cd 进入所选目录

和模糊完成模式:

# Files under current directory
# - You can select multiple items with TAB key
vim **<TAB>

# Files under parent directory
vim ../**<TAB>

# Files under parent directory that match `fzf`
vim ../fzf**<TAB>

# Files under your home directory
vim ~/**<TAB>

# Directories under current directory (single-selection)
cd **<TAB>

# Directories under ~/github that match `fzf`
cd ~/github/fzf**<TAB>

# Process IDs. Can select multiple processes with TAB or Shift-TAB
kill -9 <TAB>

# Host names
ssh **<TAB>
telnet **<TAB>

# Environment variables / aliases
unset **<TAB>
export **<TAB>
unalias **<TAB>
Run Code Online (Sandbox Code Playgroud)

  • 默认情况下,如何使其标签完成?无需输入`**` (6认同)