本文共 9429 字,大约阅读时间需要 31 分钟。
zsh 简单高效使用技巧
称为的Z shell是类似Linux / Unix的操作系统的 。 它与sh
(Bourne shell)家族中的其他shell(例如bash
和ksh
)相似,但是它提供了许多高级功能和强大的命令行编辑选项,例如增强的Tab补全。
这里不可能涵盖zsh的所有选项。 实际上有数百页它的许多功能。 在本文中,我将介绍五个技巧,以使您在zsh中使用命令行提高工作效率。
多年来,开源社区已经为zsh开发了无数主题和插件。 主题是预定义的提示配置,而插件是一组有用的别名和功能,可简化使用特定命令或编程语言的过程。
开始使用主题和插件的最快方法是使用zsh配置框架。 有很多可用的,但是最受欢迎的是 。 默认情况下,它启用了一些明智的zsh配置选项,并装有数百个主题和插件。
主题会在提示中添加有用的信息,例如Git存储库或正在使用的Python virtualenv的状态,从而使您的工作效率更高。 一目了然的信息可以使您不必键入等效的命令即可获取信息,这看起来很酷。 这是我选择的主题的示例:
除了主题外,“我的Zsh”还捆绑了许多有用的zsh插件。 例如,启用Git插件使您可以访问许多有用的别名,例如:
$ alias | grep -i git | sort -R | head -10 g = git ga = 'git add' gapa = 'git add --patch' gap = 'git apply' gdt = 'git diff-tree --no-commit-id --name-only -r' gau = 'git add --update' gstp = 'git stash pop' gbda = 'git branch --no-color --merged | command grep -vE "^(\*|\s*(master|develop|dev)\s*$)" | command xargs -n 1 git branch -d' gcs = 'git commit -S' glg = 'git log --stat'
有可用于许多编程语言,打包系统和命令行上常用的其他工具的插件。 这是我在Fedora工作站中使用的插件列表:
git golang fedora docker oc sudo vi-mode virtualenvwrapper
别名在zsh中非常有用。 为最常用的命令定义别名可以节省很多输入时间。 噢,我的Zsh默认情况下会配置几个有用的别名,包括用于导航目录的别名以及带有其他选项的常用命令的替换,例如:
ls = 'ls --color=tty' grep = 'grep --color=auto --exclude-dir={.bzr,CVS,.git,.hg,.svn}'
除了命令别名之外,zsh还启用了两种其他有用的别名类型: 后缀别名和全局别名 。
后缀别名允许您使用基于文件扩展名的指定程序打开在命令行中键入的文件。 例如,要使用vim打开YAML文件,请定义以下别名:
alias -s { yml,yaml } = vim
现在,如果您在命令行中键入任何以yml
或yaml
结尾的文件名,zsh将使用vim打开该文件:
$ playbook.yml # Opens file playbook.yml using vim
全局别名使您可以创建一个别名,该别名可以在命令行中的任意位置扩展,而不仅仅是在开头。 这对于替换常用文件名或管道命令非常有用。 例如:
alias -g G = '| grep -i'
要使用此别名,请在键入管道命令的任何地方键入G
:
$ ls -l G do drwxr-xr-x. 5 rgerardi rgerardi 4096 Aug 7 14 :08 Documents drwxr-xr-x. 6 rgerardi rgerardi 4096 Aug 24 14 : 51 Downloads
接下来,让我们看看zsh如何帮助导航文件系统。
使用命令行时,在不同目录之间导航是最常见的任务之一。 Zsh通过提供一些有用的目录导航功能使此操作更容易。 这些功能已通过Oh My Zsh启用,但是您可以使用以下命令启用它们:
setopt autocd autopushd \ pushdignoredups
设置了这些选项后,您无需键入cd
即可更改目录。 只需输入目录名称,然后zsh切换到该目录名称:
$ pwd / home / rgerardi $ / tmp $ pwd / tmp
要返回,请输入-
:
Zsh保留您访问过的目录的历史记录,因此您可以快速切换到任何目录。 要查看列表,请输入dirs -v
:
$ dirs -v 0 ~ 1 / var / log 2 / var / opt 3 / usr / bin 4 / usr / local 5 / usr / lib 6 / tmp 7 ~ / Projects / Opensource.com / zsh-5tips 8 ~ / Projects 9 ~ / Projects / ansible 10 ~ / Documents
通过键入~#
切换到此列表中的任何目录,其中#是列表中目录的编号。 例如:
$ pwd / home / rgerardi $ ~ 4 $ pwd / usr / local
将它们与别名结合使用,可以更轻松地进行导航:
d = 'dirs -v | head -10' 1 = 'cd -' 2 = 'cd -2' 3 = 'cd -3' 4 = 'cd -4' 5 = 'cd -5' 6 = 'cd -6' 7 = 'cd -7' 8 = 'cd -8' 9 = 'cd -9'
现在,您可以输入d
以查看列表中的前十个项目以及切换到该列表的数字:
$ d 0 / usr / local 1 ~ 2 / var / log 3 / var / opt 4 / usr / bin 5 / usr / lib 6 / tmp 7 ~ / Projects / Opensource.com / zsh-5tips 8 ~ / Projects 9 ~ / Projects / ansible $ pwd / usr / local $ 6 / tmp $ pwd / tmp
最后,zsh使用Tab补全自动扩展目录名称。 键入目录名称和TAB
的首字母以使用它:
$ pwd / home / rgerardi $ p / o / z ( TAB ) $ Projects / Opensource.com / zsh-5tips /
这只是zsh强大的Tab补全系统支持的功能之一。 让我们看看更多。
Zsh强大的完成系统是其标志之一。 为了简化起见,我将其称为Tab补全,但实际上,发生了不止一件事情。 通常会有扩展和命令完成。 我在这里一起讨论。 有关详细信息,请参阅本《 。
默认情况下,“哦,我的Zsh”启用命令完成功能。 要启用它,请将以下行添加到您的.zshrc
文件中:
autoload -U compinit compinit
Zsh的完成系统很智能。 它尝试仅建议可以在特定上下文中使用的项目,例如,如果键入cd
和TAB
,则zsh仅建议目录名称,因为它知道cd
不能与其他任何名称一起使用。
相反,例如,当运行与用户相关的命令时,它建议使用用户名,而在使用ssh
或ping
时,则建议使用主机名。
它具有庞大的完成库,并且可以理解许多不同的命令。 例如,如果您使用的是tar
命令,则可以按Tab键查看包中可用作提取候选文件的列表:
$ tar -xzvf test1.tar.gz test1 / file1 ( TAB ) file1 file2
这是使用git
的更高级的示例。 在此示例中,输入TAB
,zsh自动完成存储库中唯一可以暂存的文件的名称:
$ ls original plan.txt zsh-5tips.md zsh_theme_small.png $ git status On branch master Your branch is up to date with 'origin/master' . Changes not staged for commit: ( use "git add..." to update what will be committed ) ( use "git checkout -- ..." to discard changes in working directory ) modified: zsh-5tips.md no changes added to commit ( use "git add" and / or "git commit -a" ) $ git add ( TAB ) $ git add zsh-5tips.md
它还了解命令行选项,并仅建议与所选子命令相关的选项:
$ git commit - ( TAB ) --all -a -- stage all modified and deleted paths --allow-empty -- allow recording an empty commit --allow-empty-message -- allow recording a commit with an empty message --amend -- amend the tip of the current branch --author -- override the author name used in the commit --branch -- show branch information --cleanup -- specify how the commit message should be cleaned up --date -- override the author date used in the commit --dry-run -- only show the list of paths that are to be committed or not, and any untracked --edit -e -- edit the commit message before committing --file -F -- read commit message from given file --gpg-sign -S -- GPG-sign the commit --include -i -- update the given files and commit the whole index --interactive -- interactively update paths in the index file --message -m -- use the given message as the commit message ... TRUNCATED ...
键入TAB
,您可以使用箭头键导航选项列表并选择所需的选项列表。 现在,您无需记住所有这些Git选项。
有很多可用的选项。 找到最对您有帮助的最佳方法是使用它。
Zsh的命令行编辑功能也很有用。 默认情况下,它模拟emacs。 如果像我一样喜欢vi / vim,请使用以下命令启用vi绑定:
$ bindkey -v
如果您使用的是Oh My Zsh,则vi-mode
插件会在您的提示上启用附加绑定和模式指示符-非常有用。
启用vi绑定后,您可以使用vi命令编辑命令行。 例如,按ESC+/
搜索命令行历史记录。 在搜索时,按n
会显示下一条匹配行,而N
则显示前一行。 压制后最常见的vi命令工作ESC
如0
跳转到行的开始, $
跳转到结束时, i
插入, a
追加等。即使命令随后运动工作,如cw
到变化的字。
如果要修复或重新执行以前使用的命令,除了命令行编辑外,zsh还提供了一些有用的命令行历史记录功能。 例如,如果您输入有误,则键入fc
会在您喜欢的编辑器中带来最后一个命令来修复它。 它尊重$EDITOR
变量,默认情况下使用vi。
另一个有用的命令是r
,它重新执行最后一个命令; r <WORD>
,它执行包含字符串WORD
的最后一个命令。
最后,键入双刘海( !!
)将带回该行中的最后一个命令。 例如,这在您忘记键入sudo
来执行需要提升特权的命令时非常有用:
$ less / var / log / dnf.log / var / log / dnf.log: Permission denied $ sudo !! $ sudo less / var / log / dnf.log
这些功能使查找和重复使用以前键入的命令变得更加容易。
这些只是使您提高工作效率的zsh功能中的一部分。 还有更多。 有关其他信息,请查阅以下资源:
您有任何zsh生产力提示要分享吗? 我希望在下面的评论中听到有关它们的信息。
翻译自:
zsh 简单高效使用技巧
转载地址:http://lgjzd.baihongyu.com/