加速你的 zsh —— 最强 zsh 插件管理器 zplugin/zinit 教程

2020-01-26 更新:

Zplugin 已改名 Zinit,不过教程中的内容仍然适用。
阅读时请自行在脑中替换 (

2020-01-14 更新:

博主已经叛逃 powerlevel10k 了(注意是 10k 不是 9k)。
p10k 的 Instant Prompt 功能非常好用,它可以在其他插件的加载过程中提供一个精简的 prompt 供使用,相当于后台加载。

这个功能并不能加快实际的加载速度, 比如 time zsh -ic 'exit' 的结果仍然不会变,但是使用体验提升巨大(体验上几乎是瞬间加载)!

读到这里的读者建议先尝试一下 p10k(如果很满意就不用往下看了)。

我已经去掉了配置文件中所有的 zinit 延迟加载语句,不过 zinit 即使去掉延迟加载功能仍然十分强大,我还是选择继续使用 zinit。
而且如果加载了特别耗时的插件的话,zinit 仍然是有用的。

前言

Zinit 是个冷门但是却强大无比的 zsh 插件管理器,它拥有一个 killer feature —— Turbo mode,可以让插件在后台加载。这意味这你可以先加载最重要的插件,比如语法高亮和自动建议,剩下的可以统统放到后台加载,让你的 zsh 尽快进入可用状态。

利用这个机制,zinit 可以将 zsh 的启动时间缩短到几十毫秒——以我的配置为例,只需要 35 毫秒左右。而使用传统的插件管理器比如 antigen,需要近 200 毫秒才能加载完成。

这里有一张图,对比了不同插件管理器的速度(来源:Comparison of ZSH frameworks and plugin managers

可以看到 zinit 在插件数目变多时速度……似乎更快了???
什么鬼,这个大概是实验误差吧,也有可能是第一次启动时编译了自身所以后面变快了。不过 zinit 的速度是毋庸置疑的,哪怕这个插件需要数十秒来加载,只要放在后台加载,一样不影响你的 zsh 启动。

然而!!这个工具虽然强大,却没多少名气,让人倍感惋惜。

所以写下这篇文章,希望能有更多人了解到这个工具。
不过本文只涉及了它强大功能的冰山一角,深入研究推荐阅读 Zinit Wiki 和 Zinit 的 README

(虽然说是冰山一角,本文的内容也足以覆盖绝大多数情况了)

(如果你很懒不想研究的话,文末还有一份完整的示例配置,安装完成后可以直接使用)

xkeysnail 使用指南

Emacs keybings Everywhere!

简介

xkeysnail 是一个非常强大的 keyboard remapping 工具, 它类似于 xmodmap, 但更为灵活. 不仅能重映射键位, 还能重映射快捷键, 甚至能在不同的程序下使用不同的映射!

再也不用两套快捷键换来换去了!! ( 早点知道这个东西, 我就不至于练就一身无缝切换快捷键的毫无卵用的本领了...

项目地址: https://github.com/mooz/xkeysnail

JetBrains 家 IDE 在 Linux 下的奇怪字体问题(锯齿, 字体过小)

JetBrains 家的 IDE 在 Linux 下会有一些奇怪的问题: 如字体很丑(没开抗锯齿一样), 字体过小(目测是 HiDPI 下的问题), 最近更新了一下 PyCharm 2019 又出现了这个问题, 解决问题以后记录一下方案, 造福广大 JetBrains 信徒

长话短说——统统是 jre 的问题

解决方案

换用 IntelliJ patch 过的 jre

具体方法

有很多, 因为我在用 Arch Linux 就用 Arch Linux 下比较方便的方法了:

  1. 安装 clion-jre (Archlinuxcn 源有二进制包) (从 AUR 安装 intellij-jdk 应该也行, 可能还更方便? 不过懒得试了, 因为我用 clion 时已经装了这个)
  2. 如果是 clion 可以无视这条步骤. Esc-x, 输入 Switch Boot JDK, 改用 /opt/clion/jre64 ( 没有这个的话自己浏览路径选
  3. 没了, 重新启动你的 IDE, 问题应该解决了

注:2019.1 版本以后,如果需要更换 JDK 需要安装 Choose Runtime 插件,然后使用 Choose Runtime 来更换 Runtime。

Alacritty HiDPI 下的坑

为啥要折腾 Alacritty 呢, 因为 Konsole 有点小问题: https://bugs.kde.org/show_bug.cgi?id=401298 (不过这个问题已经 fix 了, 下个版本应该就没有了, 我大概又会滚回 Konsole, 毕竟有 blur 和 ligatures), 阻碍我使用棒棒的 lsd.

问题表现

具体表现为布局问题, 无视配置文件, 如

  • 总是最大化窗口
  • 总是最大化高度

解决方案(临时)

为 Alacritty 设置环境变量 WINIT_HIDPI_FACTOR=1

参考: tomaka/winit#745

PowerShell 真香

我就是饿死, 死外面, 从外面跳下去, 也不会用 M$ 的垃圾 PowerShell !

...

真香!

NOTE: 这是一篇黑 bash 吹 PowerShell(以下简称 pwsh) 的文章, bash 死忠粉以及软黑请退散.