博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
zsh 简单高效使用技巧_使用zsh提高生产力的5个技巧
阅读量:2535 次
发布时间:2019-05-11

本文共 9429 字,大约阅读时间需要 31 分钟。

zsh 简单高效使用技巧

称为的Z shell是类似Linux / Unix的操作系统的 。 它与sh (Bourne shell)家族中的其他shell(例如bashksh )相似,但是它提供了许多高级功能和强大的命令行编辑选项,例如增强的Tab补全。

这里不可能涵盖zsh的所有选项。 实际上有数百页它的许多功能。 在本文中,我将介绍五个技巧,以使您在zsh中使用命令行提高工作效率。

1.主题和插件

多年来,开源社区已经为zsh开发了无数主题和插件。 主题是预定义的提示配置,而插件是一组有用的别名和功能,可简化使用特定命令或编程语言的过程。

开始使用主题和插件的最快方法是使用zsh配置框架。 有很多可用的,但是最受欢迎的是 。 默认情况下,它启用了一些明智的zsh配置选项,并装有数百个主题和插件。

主题会在提示中添加有用的信息,例如Git存储库或正在使用的Python virtualenv的状态,从而使您的工作效率更高。 一目了然的信息可以使您不必键入等效的命令即可获取信息,这看起来很酷。 这是我选择的主题的示例:

zsh Powerlevel9K theme

zsh的Powerlevel9k主题

除了主题外,“我的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

2.聪明的别名

别名在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

现在,如果您在命令行中键入任何以ymlyaml结尾的文件名,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如何帮助导航文件系统。

3.简易目录导航

使用命令行时,在不同目录之间导航是最常见的任务之一。 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补全系统支持的功能之一。 让我们看看更多。

4.高级制表符完成

Zsh强大的完成系统是其标志之一。 为了简化起见,我将其称为Tab补全,但实际上,发生了不止一件事情。 通常会有扩展和命令完成。 我在这里一起讨论。 有关详细信息,请参阅本《 。

默认情况下,“哦,我的Zsh”启用命令完成功能。 要启用它,请将以下行添加到您的.zshrc文件中:

autoload      
-U compinit
compinit

Zsh的完成系统很智能。 它尝试仅建议可以在特定上下文中使用的项目,例如,如果键入cdTAB ,则zsh仅建议目录名称,因为它知道cd不能与其他任何名称一起使用。

相反,例如,当运行与用户相关的命令时,它建议使用用户名,而在使用sshping时,则建议使用主机名。

它具有庞大的完成库,并且可以理解许多不同的命令。 例如,如果您使用的是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选项。

有很多可用的选项。 找到最对您有帮助的最佳方法是使用它。

5.命令行编辑和历史记录

Zsh的命令行编辑功能也很有用。 默认情况下,它模拟emacs。 如果像我一样喜欢vi / vim,请使用以下命令启用vi绑定:

$  bindkey -v

如果您使用的是Oh My Zsh,则vi-mode插件会在您的提示上启用附加绑定和模式指示符-非常有用。

启用vi绑定后,您可以使用vi命令编辑命令行。 例如,按ESC+/搜索命令行历史记录。 在搜索时,按n会显示下一条匹配行,而N则显示前一行。 压制后最常见的vi命令工作ESC0跳转到行的开始, $跳转到结束时, 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/

你可能感兴趣的文章
小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_1-3.在线教育站点需求分析和架构设计...
查看>>
小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_2-4.后端项目分层分包及资源文件处理...
查看>>
小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_2-2.快速搭建SpringBoot项目,采用IDEA...
查看>>
小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_2-7.接口配置文件自动映射到属性和实体类配置...
查看>>
小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_2-5.开源工具的优缺点选择和抽象方法的建议...
查看>>
小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_3-1.整合Mybatis访问数据库和阿里巴巴数据源...
查看>>
小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_2-6.Mysql逆向工程效率神器之使用IDE自动生成Java实体类...
查看>>
小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_3-4.动态Sql语句Mybaties SqlProvider...
查看>>
小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_4-1.单机和分布式应用的登录检验讲解...
查看>>
小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_4-3.登录检验JWT实战之封装通用方法...
查看>>
小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_3-2.使用Mybatis注解开发视频列表增删改查...
查看>>
小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_5-2.微信扫一扫功能开发前期准备...
查看>>
小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_3-3.Vidoe相关接口完善和规范协议...
查看>>
小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_5-3.微信Oauth2.0交互流程讲解...
查看>>
小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_3-5.PageHelper分页插件使用
查看>>
小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_5-6.微信扫码登录回调本地域名映射工具Ngrock...
查看>>
小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_4-2.微服务下登录检验解决方案 JWT讲解...
查看>>
小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_5-8.用户模块开发之保存微信用户信息...
查看>>
HDU 5353 Average
查看>>
进程和计划管理
查看>>