我在 Mac OS X 上使用 oh-my-zsh 和自制的 zsh 4.3.12。我最近偶然发现一个奇怪的问题。我scripts/not-used
有几个.R
文件:
breakdowns.R eventloop.R process-largeclients.R process-qt.R
reprocess-pinning.R calculate-qt-error.R generate_decision_tree.R process-net.R
process-scalingexp.R
但是,当我尝试ls scripts/not-used/
+时,Tab第一个完成是代表光标位置的ls scripts/not-used/_.R
位置_
。如果我Tab再次按下,我会得到这个奇怪的完成:
$ ls scripts/not-used/.R
breakdowns.R eventloop.R
如何取消这种丑陋(错误)的行为?
设置的选项有:
alwaystoend autocd autonamedirs autopushd cdablevars completeinword
correctall extendedglob extendedhistory noflowcontrol
histexpiredupsfirst histignoredups histignorespace histreduceblanks histverify
incappendhistory
interactive login longlistjobs monitor promptsubst
pushdignoredups pushdminus pushdsilent pushdtohome
sharehistory shinstdin zle
答案1
问题出在zstyle
for 匹配器列表上。
如果您将以下内容添加到您的.zshrc
,它将修复它:
zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' 'e:|[._-]=* e:|=*' 'l:|=* e:|=*'
e:
(而不是默认的)强制r:
匹配到字符串的末尾。
选项的详细信息可以在ZSH:完成匹配控制文档
答案2
您注意到它把光标放在哪里了吗?由于所有文件都以 .R 结尾,因此它会自动为您附加可能的建议。
自动完成功能使用“两端”,如 Tshepang 所描述的那样。
尝试将一个没有 .R 名称的文件放入此文件夹中,您会发现 .R 位消失了。
老实说,自动完成实际上需要一些东西来“完成”而不是盲目的目录假设。
答案3
格特很可能是解决这个问题的最佳人选。但是,我怀疑文件列表(breakdowns.R 和 eventloop.R)不完整的原因是这些文件是当前工作目录中唯一标记为可执行文件的文件。您可以使用“ls -l”确认这一点,并查看 rwx 之类的权限。如果您在 PATH 中没有明确显示“./”或该目录,那么我希望这两个文件也不会出现。
8 -rwxr--r-- 1 userbob groupbob 4420 May 28 15:55 filebob.R