zsh chdir可以搜索并匹配历史记录吗?

zsh chdir可以搜索并匹配历史记录吗?,zsh,Zsh,我是zsh的新手 如果是唯一的,我可以键入类似于cd%wiki的内容跳转到~/prj/golang/gowiki 但是如果有两个以上的目录可用于cd%unix,只需显示匹配的目录即可 这是我的历史记录样本 $ dirs -v 0 ~/prj/golang 1 ~ 2 ~/prj/unixconf 3 ~/prj/unixconf/srv 4 ~/memo 5 ~/prj/golang/gowiki 请参阅zshall元手册页(manzshall),以获得了解许多精彩

我是zsh的新手

如果是唯一的,我可以键入类似于
cd%wiki
的内容跳转到
~/prj/golang/gowiki

但是如果有两个以上的目录可用于
cd%unix
,只需显示匹配的目录即可

这是我的历史记录样本

$ dirs -v  
0   ~/prj/golang
1   ~
2   ~/prj/unixconf
3   ~/prj/unixconf/srv
4   ~/memo
5   ~/prj/golang/gowiki

请参阅zshall元手册页(
manzshall
),以获得了解许多精彩zsh技巧的最简单途径。值得注意的还有zshcontrib和zshmisc手册页

下面是一个摘录,可以帮助您更容易地记住dirstack中的目录

REMEMBERING RECENT DIRECTORIES
   The function cdr allows you to change the working directory to a previous
   working directory from a list maintained automatically.  It is similar in
   concept to the directory stack controlled by the pushd, popd and dirs
   builtins,  but  is  more  config‐ urable,  and  as it stores all entries
   in files it is maintained across sessions and (by default) between
   terminal emulators in the current session.  (The pushd directory stack is
   not actually modified or used by cdr unless you configure it to do so as
   described in the configuration section below.)

Installation
   The system works by means of a hook function that is called every time
   the directory changes.  To install the system, autoload the required
   functions and use the add-zsh-hook function described above:

          autoload -Uz chpwd_recent_dirs cdr add-zsh-hook
          add-zsh-hook chpwd chpwd_recent_dirs

   Now every time you change directly interactively, no matter which command
   you use, the directory to which you change will be remembered in
   most-recent-first order.

Use
All direct user interaction is via the cdr function.

   The argument to cdr is a number N corresponding to the Nth most recently
   changed-to directory.  1 is the immediately preceding directory; the
   current directory is remembered but is not offered as a destination.
   Note that if you have  multiple  windows open 1 may refer to a directory
   changed to in another window; you can avoid this by having per-terminal
   files for storing directory as described for the recent-dirs-file style
   below.

   If you set the recent-dirs-default style described below cdr will behave
   the same as cd if given a non-numeric argument, or more than one
   argument.  The recent directory list is updated just the same however you
   change directory.

   If the argument is omitted, 1 is assumed.  This is similar to pushd's
   behaviour of swapping the two most recent directories on the stack.

   Completion for the argument to cdr is available if compinit has been run;
   menu selection is recommended, using:

          zstyle ':completion:*:*:cdr:*:*' menu selection

   to  allow  you to cycle through recent directories; the order is
   preserved, so the first choice is the most recent directory before the
   current one.  The verbose style is also recommended to ensure the
   directory is shown; this style is on by default so no action is required
   unless you have changed it.

对于命名目录,您需要使用
散列-d name=/path
并将其放入您的zshrc中。然后,您可以使用
cd~name

将cd刻录到那些目录中。我认为,如果不编写自定义版本的cd(即创建一个名为
cd
的函数,该函数将取代
内置cd
),您将无法获得这些内容

你可以这样做:

DIRSTACKSIZE=20
setopt auto_pushd # Make cd push the old directory onto the directory stack.
setopt pushd_ignore_dups # Ignore duplicates at the directory stack.
setopt pushd_minus # makes the whole pushd list easier to use from 'cd'
如果你真的这么做了

% cd -[TAB]
1 -- /tmp
2 -- /etc
您可以使用以下号码:

cd -2 # jumps to /etc
还请注意,您可以通过
~-NUMBER
从其他命令(mv、cp等)使用目录堆栈

mv notes.txt ~-[TAB]
1 -- /tmp
2 -- /etc
3 -- /my/very/complicated/dir/path