是否"以"开头? ZSH中的别名?

时间:2016-07-25 15:37:31

标签: bash alias zsh oh-my-zsh startswith

我为我经常使用的文件夹定义了几个别名; e.g。

alias x="cd /home/username/git/github/user/project"

因此,在终端中输入x会直接将我带到项目文件夹。

我认为定义一个也使用的别名会很好,如果一个字符串只以别名开头;例如如果我定义了

starts-with-alias x="cd /home/username/git/github/user/project"

输入

x/abc

会带我去:

/home/username/git/github/user/project/abc

2 个答案:

答案 0 :(得分:1)

使用标准shell函数,您可以执行类似

的操作
x() { cd /home/username/git/github/user/project/"$1"; }

x会将您带到那里,x abc会将您带到/home/username/git/github/user/project/abc

不完全是你要求的,但非常接近。

免责声明:仅在bash下进行测试;标准语法可能会有所不同,zsh也是如此。

答案 1 :(得分:1)

我建议使用Static Named Directories代替别名,可能与选项AUTO_CD and/or CDABLE_VARS结合使用。

静态命名目录~表示,后跟名称(我包含任何字母数字字符,_-. )。通常,它们用于系统上用户的主目录,这意味着~someuser将被用户someuser的实际主目录替换。

zsh中,您还可以使用以下两种方法之一定义自己的静态命名目录

  • 定义一个shell参数,其值以/开头:

    x=/home/username/git/github/user/project
    
  • 或使用带参数hash的{​​{1}}命令(与别名类似):

    -d

这两种方法之间的唯一区别是,第一个(显然)提供了一个shell参数,您可以在未扩展命名目录(例如在引用的字符串内)或导出为环境变量的情况下使用它。 无论使用哪种方法,您现在都可以访问名为hash -d x=/home/username/git/github/user/project 的目录/home/username/git/github/user/project

~x

它也可以作为路径的第一个组成部分:

% cd ~x
% pwd
/home/username/git/github/user/project

与别名相比,它还可以与其他命令一起使用,而不仅仅是% cd ~x/abc % pwd /home/username/git/github/user/project/abc

cd

启用选项% touch ~x/somefile % echo foobar > ~x/somefile % cat ~x/somefile foobar 后,AUTO_CD会自动更改为目录,如果它是代替命令发出的:

zsh

启用选项% setopt autocd % ~x % pwd /home/username/git/github/user/project % ~x/abc % pwd /home/username/git/github/user/project/abc 后,如果CDABLE_VARS命令的参数(或启用了cd的隐含cd)不是目录且不以AUTO_CD/会尝试扩展参数,就像它以zsh开头一样:

~

启用% setopt cdablevars % cd x % pwd /home/username/git/github/user/project % cd x/abc % pwd /home/username/git/github/user/project/abc AUTO_CD,您可以使用命名目录,就像CDABLE_VARS的别名一样,还可以直接访问子目录。

cd

注意:如果未在% setopt autocd cdablevars % x % pwd /home/username/git/github/user/project % x/abc % pwd /home/username/git/github/user/project/abc 的上下文中使用指定目录(通过cd显式或隐式),则名称前面需要{{1} }为了扩展:

AUTO_CD