Answers:
刚发现这个小宝石:
cd old new
这种形式的cd
替换用old
当前目录的完整路径中出现的所有,new
并尝试将工作目录更改为结果路径。
例如,如果您的工作目录为,/home/larry/code/backrub/server
而您想切换到/home/sergei/code/backrub/server
,则只需执行以下操作:
cd larry sergei
据我所知,我会坚持bash无法做到的事情。
花式的完成。是的,bash有一些功能,但是zsh知道更多的命令,通常更精确,并且具有更多的配置可能性。
该**
水珠,例如,**/foo
查找一个名为文件foo
子目录中递归。(并且***/foo
也跟随符号链接。)用两个字符代替长find
命令(如果某些文件名包含空格和引号之类的特殊字符,则很难正确执行)。
较少出现glob限定符,例如foo*(*)
(例如foo*
,但仅保留可执行文件),foo(.)
(仅常规文件而不是目录),foo(-@)
(仅悬挂的符号链接),foo*(m-5)
(仅最近5分钟内foo*(om[1])
修改的文件),(最近修改的文件)等
autocd
:通过命令键入目录名称会更改为该名称(cd
或pushd
取决于您如何配置它)。该cd
命令是三个字符太长了!我不能使用bash超过三十秒钟而不会感到疼痛。我也有一些单字符函数,例如
功能-{ 如果[[$#-eq 0]]; 然后 cd“ $ OLDPWD” 其他 内置-“ $ @” 科幻 }
zmv
内置和别名zcp ='noglob zmv -C' 别名zln ='noglob zmv -L' 别名zmv ='noglob zmv'
当我在做的时候,noglob
内置的。
在precmd
与preexec
钩子函数:我使用的preexec
设置我的终端的标题,包括正在运行的命令,precmd
以取代其退出代码的命令。就像是
term_title_base ='@%l:%1〜' preexec(){ 打印-nr $'\ e] 2;'“ $ {(%)term_title_base} $ *”'$ \ a' } precmd(){ 打印-nr $'\ e] 2;'“ $ {(%)term_title_base}($?)”'$ \ a' }
bg
(以便Ctrl + Z Ctrl + Z挂起程序并立即在后台恢复它)。fancy-ctrl-z(){ 如果[[$#BUFFER -eq 0]]; 然后 bg 重新显示 其他 zle推入式输入 科幻 } zle -N fancy-ctrl-z 绑定键'^ Z'fancy-ctrl-z
setopt append_history autocd extended_glob no_match
zsh能够自动完成文件和目录以外的内容。
例如,安装了git软件包后,git-sh {tab}会显示:
-git命令- shortlog-汇总git日志输出 show-branch-显示分支及其提交 show-index-显示包idx文件的内容
我真的很喜欢全局别名
alias -g L='|less
alias -g DN='>/dev/null'
让我做类似的事情
somecommand file arg L
并获取分页。
正如其他人提到的,zsh的自动完成功能非常出色。
您也可以为自定义命令设置自己的自动完成功能,而无需太多麻烦。要将完整的用户名制表符作为finger的参数:
# ~/.zshrc
function userlist {
reply=(`users | tr ' ' '\n' |sort -u `);}
compctl -K userlist finger
set COMPLETE_ALIASES
我喜欢设置的其他选项:
# turn on spelling correction
setopt correct
# don't save duplicates in command history
setopt histignoredups
# don't allow accidental file over-writes
setopt noclobber
推和弹出也很方便。
# Always pushd when changing directory
setopt auto_pushd
# Have pushd with no arguments act like `pushd $HOME'.
setopt PUSHD_TO_HOME
令人讨厌的是,默认情况下,home键和end键在zsh上无法像在其他shell上那样工作,但是您可以解决此问题。
# Make home and end keys work.
[[ -z "$terminfo[khome]" ]] || bindkey -M emacs "$terminfo[khome]" beginning-of-line
[[ -z "$terminfo[kend]" ]] || bindkey -M emacs "$terminfo[kend]" end-of-line