Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Completion for cd
- X-seq: zsh-users 22565
- From: Jesper Nygårds <jesper.nygards@xxxxxxxxx>
- To: Zsh Users <zsh-users@xxxxxxx>
- Subject: Completion for cd
- Date: Tue, 14 Mar 2017 18:38:23 +0100
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:from:date:message-id:subject:to; bh=3o4ehzQ7z4Tv3ORmGYvKmL6vbxRLI2QmqqfVb1V+ru4=; b=rIDUCVIWRpRvve8zXzTlMfBHGcFyiaWwpHjyJNCjIrZj0XlhtpuDchHp5Va9t7C6Bb N3HhJjUp/gHo76sR/rjhP5onCu1ZRbI3z8EE/+OuVnffBcqzJ9EWGpF6caAhozzC0cDp ORFzUM5DTUYQfjGxiHMgV2v0uC66IVXPTEm2quChulEc1P2SJ0mNfw/uvHVCmJcfA+37 UUStdGgMxMra3pee/bWgWaHGLy2p1MxukdDb96YmyU4ih7iX3G53K7TorYlW0oLSQVV0 4Xpqah+wyzqecTzTtXMToeSysqNSd5MNDS008gn42RwRb9XLl26pb2Iap/wDKGFrzDvu L6Dg==
- List-help: <mailto:zsh-users-help@zsh.org>
- List-id: Zsh Users List <zsh-users.zsh.org>
- List-post: <mailto:zsh-users@zsh.org>
- Mailing-list: contact zsh-users-help@xxxxxxx; run by ezmlm
I am using zsh 5.3.1. For a long time I've had the following completion
configuration:
zstyle ':completion:*' matcher-list 'm:{[:lower:]}={[:upper:]}' '+l:|=*'
zstyle ':completion::*:::' completer _expand _complete _prefix _approximate
_ignored
cdpath=(. /opt)
The idea is of course that if something I write is the start of a
completion, I want it to be completed. If such match is _not_ found, I want
completion to the left (prefix completion?) to be attempted. It works well.
If I stand in a directory 'statistics' containing the directories
'stats-lib' and 'stats-web', I can write 'cd web<tab>' and have it
completed to 'stats-web'. That is what I want.
However, I have a slight problem with it. In my '/opt' directory, I have a
directory called 'webcert'. If I stand in the 'statistics' directory,
writing 'cd web<tab>' gives me 'webcert', since '/opt' is in the cdpath
array. This is as expected since I have configured matcher-list to prefer
what is a prefix to what is a suffix, so 'webcert' (in the cdpath) is
found, and therefore 'stats-web' (in the current directory) is never
offered.
I would like to keep the matcher-list configuration, but for the cmpletion
to prefer matches in the current directory over matches in cdpath. I
therefore added the following configuration:
zstyle ':completion:*:*:cd:*:*' completer _expand _complete
_complete:withpath _prefix _approximate _ignored
zstyle ':completion:*:complete:cd:*:*' tag-order local-directories -
zstyle ':completion:*:withpath:cd:*:*' tag-order path-directories
This works as intended: now 'stats-web' in the current directory is
preferred over 'webcert' in cdpath, so typing 'cd web<tab>' completes to
'stats-web'. If I want to go to 'webcert', I can type 'cd webc<tab>' and it
will complete to 'webcert'.
However, now I find a surprising side-effect of this change. I have also
this configuration:
zstyle ':completion:*:*:cd:*:*' ignore-parents parent pwd
But this is broken by my change! If I go to directory 'zsh' in
'/usr/local/Cellar', and then type 'cd ../z<tab>', I am offered 'zsh'
together with 'zsh-completion', whereas before the change, I would only be
offered 'zsh-completion', since I have configured cd to ignore the current
directory.
I can't figure out why my configuration change has caused the
'ignore-parents' style to stop working.
Messages sorted by:
Reverse Date,
Date,
Thread,
Author