如何在云服务器上使用ZShell(zsh)
介绍
本文介绍如何在云服务器上使用 zsh。 您可以通过简单地尝试启动它来验证 zsh 是否安装在您的 VPS 上:
zsh
如果您安装了 zsh,您将直接启动到该 shell。
否则,建议您在继续之前 安装 zsh。
使用 zsh
在这一点上可能很难理解 zsh 比 bash 这样的 shell 强大多少。 让我们从研究 shell 的自动完成功能开始。
自动完成
假设我们要安装“vim-addon-manager”来帮助我们组织我们的文本编辑器配置文件。 我们不记得这个包叫什么了。 我们可以不使用 apt-cache 来搜索包名,而是使用 zsh 给出以“vim”开头的包列表。
sudo apt-get install vim<tab>
vim vim-doc vim-lesstif vim-scripts vim-addon-manager vim-gnome vim-migemo vim-syntax-go vim-athena vim-gtk vim-nox vim-syntax-gtk vim-common vim-gui-common vim-puppet vim-tiny vim-conque vimhelp-de vim-rails vim-vimoutliner vim-dbg vim-latexsuite vim-runtime
当我们使用使用 apt 完成后,我们看到它为我们提供了可用软件包的列表。 然后,我们可以输入获得唯一命中所需的其他字母。 在这种情况下,键入“-ad ” 将根据需要完成命令。
sudo apt-get install vim-ad<tab>
让我们的自动完成功能更加强大。 让我们将以下部分添加到我们的 .zshrc 中:
nano ~/.zshrc
zstyle ':completion:*' menu select setopt completealiases
这将做两件事。 它可以让我们自动完成我们可能在 .zshrc 中写入的任何别名,并且当有多个可用选项时,它还可以让我们从菜单中进行选择。 让我们再次获取 .zshrc 文件以加载我们的更改,然后再次尝试 apt-get 示例。
source ~/.zshrc sudo apt-get install vim<tab>
它看起来一样。 不同的是,现在我们可以按下键,然后使用和箭头键选择您的选项。 在某些情况下,这可能会导致选择更快。
通配符
我们最初设置的选项之一是使用扩展的通配表达式。 通配符是一种在搜索或将参数传递给任何程序或函数时使用特殊符号来匹配和过滤结果的语法。
让我们尝试几个例子。 首先,如果您不熟悉这个想法,我们将尝试一些更传统的 globbing。 让我们创建一个测试目录并用一些文件填充它。
mkdir test cd test touch file1 file2 file3 file100 file120 file122 file200 file222 touch file250 file800 file808 file80 somefile anotherfile touch thisotherfile file.txt file.c file.o file.html file.css touch completelydifferent different separate mkdir directa directb directc directd
我们的测试目录现在有很多我们可以选择和操作的文件和目录。
让我们选择其中包含 word 文件的所有内容。 星号 (*) 字符代表 0 个或多个字符。
ls *file*
anotherfile file120 file200 file3 file808 file.html somefile file1 file122 file80 file.c file.o thisotherfile file100 file2 file250 file800 file.css file.txt
结果是标题中包含“文件”一词的每个文件。 假设我们只想找到以“file”开头的文件。
ls file*
file1 file122 file222 file80 file.c file.o file100 file2 file250 file800 file.css file.txt file120 file200 file3 file808 file.html
这会稍微减少我们的结果,但让我们进一步缩小范围。 插入符号 (^) 用于否定后面的模式。 因此,假设我们想要所有以“file”开头的文件,但我们不想要“1”紧跟在“file”之后的任何地方。
ls file^1*
file2 file222 file3 file800 file.c file.html file.txt file200 file250 file80 file808 file.css file.o
假设我们要查找所有以“file”开头的文件,其后有一个从 100 到 300 的数字。 我们可以使用小于 (<) 和大于 (>) 符号来包围一系列数字。
ls file<100-300>
file100 file120 file122 file200 file222 file250
如果我们想要所有这些结果,但我们特别不想要 file200,我们可以告诉 zsh 不要使用波浪号 (~) 字符来选择它。
ls file<100-300>~file200
file100 file120 file122 file222 file250
让我们做一些更复杂的选择。 我们可以通过在一组括号内提供选择器来进一步限定我们的结果。 如果我们想选择所有常规文件(不是目录、链接等),我们可以使用类似这样的东西。
ls *(.)
anotherfile file100 file200 file80 file.css separate completelydifferent file120 file222 file800 file.html somefile different file122 file250 file808 file.o thisotherfile file1 file2 file3 file.c file.txt
请注意,我们创建的目录都没有列出。 相反,如果我们只想要目录,我们可以使用:
ls *(/)
directa: directb: directc: directd:
接下来,让我们选择测试目录中的 5 个最新文件。 我们可以通过在括号中使用“o”限定词来做到这一点。 这选择了我们的排序方法。 我们将在“o”后面加上一个“m”,这意味着我们正在按修改时间排序。 最后,我们将在括号中提供一个范围,告诉 zsh 我们想要多少个结果。
ls *(.om[1,5])
completelydifferent different file.css file.html separate
各种各样的
这里有一些额外的想法可以尝试。
我们可以将 zsh 配置为根据文件扩展名自动使用特定程序打开文件。 我们将使用“后缀别名”来完成此操作。 这些可以添加到我们的 .zshrc 中,这样如果我们只需键入文件名并按回车键,就会使用正确的程序打开它。
让我们使用“less”打开任何扩展名为 .view 的文件,使用“nano”打开任何以 .edit 结尾的文件。 将此行添加到 .zshrc 的底部。
nano ~/.zshrc
alias -s view=less alias -s edit=nano
source ~/.zshrc
现在,让我们创建两个文件来测试它。
touch test.view test.edit
如果我们输入:
test.view
当我们按回车键时,文件将以“less”打开。 但是,如果我们键入:
test.edit
正如预期的那样,该文件将在 nano 中打开。
zsh 为我们提供的另一个好处是完成提示。 zsh 在输入多行输入时为我们提供了很好的视觉指标。 试一试吧。 如果我们输入这样的内容并点击“回车”:
print “this is a line
我们将看到这样的提示:
dquote>
我们可以通过用第二组双引号结束我们的输入来完成这一行。
dquote> that goes onto the next line”
如您所见,它告诉我们需要关闭什么样的输入才能完成语句。 如果我们尝试在提示符中键入一个简单的 shell 脚本,我们可以看到类似的事情发生。
if [[ -o interactive ]]; then then> print yes then> else else> print no else> fi
正如你所看到的,它给了我们同样的暗示。 如果您有跨越多行的长输入语句,这将非常有用。
将 zsh 设置为默认 shell
如果您认为云服务器上的 zsh 适合您的日常 shell 需求,则可以将其设为用户的默认 shell。 这样,每次登录时,都会加载您的首选项并生成一个 zsh 会话。 您将不再需要输入“zsh”来访问您的 VPS 中的 zsh。
chsh -s $(which zsh)
下次登录时,您将看到一个 zsh 提示。