从 bash 迁移到 zsh

Ham*_*ner 146 command-line bash zsh

我正在考虑从 bash 转移到 zsh,因为我经常遇到赞美 zsh 的帖子。我是一名经验丰富的命令行用户,我假设基础知识几乎相同,所以我正在寻找建议以获得移动的好处,以及任何需要注意的问题。

请为每个答案提供一点建议。我正在寻找一口大小的块,在那里我可以回来并以稳定的速度将额外的信息集成到我的 shell 使用中,而不是试图一次性学习所有内容。

loe*_*org 97

正如你所说,zsh在许多方面与bash. 它具有一些您在 中找不到的功能bash,并且可以以强大的方式进行扩展。不要将移动视为一种革命,而是将其视为有助于您日常工作的一系列进化步骤。以下是我的一些提示.zshrc。虽然你说你更喜欢单一的建议,但这篇文章是一个很长的清单。尽管如此,逐一讨论这些要点仍然是一个好主意。只需将有趣的部分添加到您的~/.zshrc并重新加载source ~/.zshrc。最后一个提示:了解zsh的默认(“Emacs”)键盘快捷键的击键:^A ^E ^W Alt-F Alt-B Alt-P ^L ^R。您可以用Alt两个单独的按键替换:Alt-P相当于ESC P


这为您提供了更广泛的选项卡完成。

autoload -U compinit
compinit
Run Code Online (Sandbox Code Playgroud)

两端的 Tab 补全。

setopt completeinword
Run Code Online (Sandbox Code Playgroud)

选项卡完成应不区分大小写。

zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}'
Run Code Online (Sandbox Code Playgroud)

更好地完成killall。

zstyle ':completion:*:killall:*' command 'ps -u $USER -o cmd'
Run Code Online (Sandbox Code Playgroud)

更改“单词”的定义,例如使用 ^W。

autoload select-word-style
select-word-style shell
Run Code Online (Sandbox Code Playgroud)

ls 的颜色。

if [[ -x "`whence -p dircolors`" ]]; then
  eval `dircolors`
  alias ls='ls -F --color=auto'
else
  alias ls='ls -F'
fi
Run Code Online (Sandbox Code Playgroud)

ls 的快捷方式。

alias ll='ls -l'
alias la='ls -a'
Run Code Online (Sandbox Code Playgroud)

所有打开的贝壳的历史记录;存储 10,000 个条目。这使它成为一个有用的记忆辅助工具,可以查找您上次./configure使用的命令等。请随意使用 Alt-P(以这样的方式开头的查找命令)和 ^R(在历史中搜索)。

HISTFILE=~/.zhistory
HISTSIZE=SAVEHIST=10000
setopt sharehistory
setopt extendedhistory
Run Code Online (Sandbox Code Playgroud)

启用各种扩展的通配符,例如 ls **/*.txt(查找所有文本文件),ls -d *(D)(显示所有文件,包括以“.”开头的文件)。要了解更多信息,请转到man zshexpn“文件名生成”部分。

# superglobs
setopt extendedglob
unsetopt caseglob
Run Code Online (Sandbox Code Playgroud)

这对于记住历史中的命令而不执行它们很有用。

setopt interactivecomments # pound sign in interactive prompt
Run Code Online (Sandbox Code Playgroud)

键入“..”而不是“cd ..”,键入“/usr/include”而不是“cd /usr/include”。

setopt auto_cd
Run Code Online (Sandbox Code Playgroud)

不错的提示。

PS1='[%T] %n@%m:%~# '
Run Code Online (Sandbox Code Playgroud)

显示执行时间超过 10 秒的命令的 CPU 使用情况统计信息

REPORTTIME=10
Run Code Online (Sandbox Code Playgroud)

您在 Ubuntu 中广泛使用的一些命令。

alias 'a=sudo aptitude'
alias 'ai=sudo aptitude install'
alias 'ar=sudo aptitude remove'
alias 'au=sudo aptitude update'
alias 'ag=sudo aptitude safe-upgrade'
alias 'as=apt-cache search'
alias 'aw=apt-cache show'
Run Code Online (Sandbox Code Playgroud)

列出按大小排序的包 - 在确定哪些包占用您的磁盘空间时很有用。

function apt-list-packages {
  dpkg-query -W --showformat='${Installed-Size} ${Package} ${Status}\n' | grep -v deinstall | sort -n | awk '{print $1" "$2}'
}
Run Code Online (Sandbox Code Playgroud)

  • +1 有用。-1 用于秘密的 emacs 宣传! (8认同)
  • 您可能还喜欢 [https://github.com/robbyrussell/oh-my-zsh](oh-my-zsh),它为 zsh 添加了很多插件。 (3认同)

qbi*_*qbi 14

我会推荐这本书From bash to Z Shell。它具有切换 shell 所需的所有建议。它解释了两种 shell 的差异,并使新的 zsher 变得容易。


Las*_*sen 8

这是我的.zshrc,这是最importaint的事情!zsh 有很多您可以使用的选项,因此请查看网络上的一些示例或阅读Zsh 主页上的文档。

除了命令行右侧的时间戳之外,我的 .zshrc 不包含任何非常酷的东西。

顺便说一句,记得在每个地方尝试制表符补全,这里有几个例子:

mplayer -a[tab]
Run Code Online (Sandbox Code Playgroud)

会显示这样的东西:

mplayer -a
 -ac                 -- force usage of a specific audio codec
 -af                 -- activate audio filters
 -afm                -- force usage of a specific audio codec family
 -alang              -- select the DVD audio language
 -ao                 -- specify audio driver
 -aop                -- specify audio output filter
Run Code Online (Sandbox Code Playgroud)

如果您使用无密码 ssh-keys 或 ssh-agent,您可能会发现 tabcomplete 远程文件很有用:

scp apollo:/home/user/[tab]
Desktop/ Documents/ Downloads/ Music/ Pictures/ Public/ Templates/ Videos/
Run Code Online (Sandbox Code Playgroud)

获得列表后,您可以多次按 Tab 键以循环浏览不同的可能性。

但是请注意,这个 shell 会让你变得懒惰,让你觉得标准的 shell 既愚蠢又烦人!


poo*_*lie 5

几个特别有用的扩展 glob:

  1. rmdir *(/^F) - 删除当前目录下的所有非空目录

  2. grep traceback /srv/log/**/*(.m-2) - 在过去两天修改的文件中查找此正则表达式

  3. chmod g+w **/*(U^I) - 将我拥有且不可组写的任何文件设为组可写

是的,当然你可以用它来写这个,find但这更容易冲刺。它确实有两个缺点,公平地说,两者都与它们都被扩展到命令行有关:如果它匹配数千个文件,则命令行将变得太长并且这将失败,其次所有文件都被找到在文件开始运行之前。

setopt extendedglob如果尚未打开,则需要)