如何构建自己的无鼠标开发环境
已发表: 2022-03-10曾几何时,在软件开发的神奇土地上,有一位年轻的开发人员,你卑微的仆人,第一次发现了 Linux。 突然间,我可以访问 Linux shell,这是一个工具,它提供了许多方法来自动化我一次又一次不想做的所有事情。
但 Ubuntu 并非没有缺点。 我经常是显示错误和崩溃的受害者,随着时间的推移,它变得越来越慢。
有一天,发生了一件可怕的事情:我不得不将 Ubuntu 更新到下一个主要版本。 一切都崩溃了。 我再也无法启动我的系统了。 我不知道如何解决我面临的问题,因为我不知道 Linux 在后台是如何工作的。 Ubuntu 把所有的细节都抽象出来让我不关心它。
我不得不手动重新安装所有东西——Ubuntu 和我所有的工具。 最糟糕的部分是重新配置一切。 总而言之,我花了几天时间才恢复到崩溃前的系统。 但我不知道任何其他选择,所以我多年来一直使用 Ubuntu。 在此期间,我从来没有设法将其更新到下一个主要版本,而无需一次又一次地手动重新安装所有内容。
当我的公司聘请了两位优秀的开发人员时,我作为开发人员的生活再次发生了变化。 他们非常了解 Linux 和我可以使用的不同发行版。 他们指导我,向我展示了解决我在 Ubuntu 中遇到的所有问题的工具。 这些工具极大地改善了我的工作流程; 他们向我展示了开发人员尽可能多地将手放在键盘上是多么实用。
这发生在六年前。 我今天仍然使用相同的开发环境。 我有 92.8% 的时间使用键盘来管理我的所有工具,使用有意义且易于记忆的击键。 我可以用我编写的一堆脚本重新安装我的整个系统,包括我使用的所有工具及其配置。
今天,我想与您分享这些工具,以便您在日常工作中也能提高效率和舒适度。 它们一起工作得很好——塑造了我所谓的无鼠标开发环境。 更准确地说,我们将讨论:
- 为什么在处理纯文本(包括代码)时使用 Linux shell 会非常强大;
- 为什么要使用可怕的 Arch Linux;
- 平铺窗口管理器的优点;
- 如何使用 URxvt、tmux 和 tmuxp 获得出色的终端体验;
- 为什么 Vim 可以成为你最好的朋友。
注意:我在本文中提倡的工具适用于基于 Linux 的系统。 除了 i3 之外,您还可以将它们与 macOS 一起使用。 对于 Windows,最简单的方法是使用 Windows Linux 子系统 (WSL) 来安装和使用它们。
如果不尝试这些工具,我永远不会发现这种新的工作方式。 这就是为什么我鼓励你安装它们,试验它们,然后自己看看你是否像我一样坠入爱河。
带壳无鼠标
作为开发人员,几乎不可能避免使用 shell。 这是一个强大的工具,可以通过自动化所有无聊的任务来简化您的工作流程。
壳牌的好处
在说使用 shell 和终端的好处之前,我们先简单解释一下这两种思路有什么区别。
终端是一个图形界面,允许您与外壳交互。 在 Linux 上,这个 shell 通常是 Bash,但它也可以是另一个,嗯 Zsh。 shell 是一个解释器。 你可以用命令喂它,它会执行它们来执行一些操作。 有时,它还会给你一个输出。 术语“命令行”和“shell”是同义词。
如果我们将无鼠标开发环境比作太阳系,外壳就是太阳,其他一切都围绕着它转动。 这是因为 shell 非常强大:它允许您运行许多可以很好地协同工作的小程序。 它们被称为 CLI(命令行界面)。
这些工具的最大优势是:它们非常简单且孤立地受到限制,但您可以将它们链接起来以获得强大的结果。 例如,您可以一起使用 CLI “history”、“sort”、“uniq”和“head”来显示您使用最多的 CLI 及其使用频率。
那里有许多可用的 CLI。 首先,因为 Linux shell 已经存在了很长时间; 开发人员有时间开发许多工具并使其可靠。 其次,因为开发 CLI 比开发 GUI(图形用户界面)更容易。 设计和实现这些图形界面需要做更多的工作。 CLI 只有文本界面,更易于开发、更改和维护。
这也是 CLI 速度快的原因:无需弄乱显示和其他图形元素。 这是我在使用 Ubuntu 时遇到的主要问题之一:它的桌面环境 Unity 非常笨重、缓慢且有问题。 至少在我的经验中。 在上面使用更多的 GUI 会使事情变得更糟。
命令行的另一大优势:您可以编写 shell 脚本来自动执行您日复一日重复的所有无聊任务。 例如,如果您需要经常将图像调整为相同大小,您可以为此编写一个脚本。 如果您经常搜索某些特定类型的文件,您也可以将其自动化。 天空是极限。
CLI 也有缺点。 对于初学者来说使用起来有点令人生畏,但是即使您不知道如何使用特定的 CLI,也有一些方法可以快速获得所需的内容。
最后,如果您在远程服务器上有一些任务要做,您通常最终会使用 shell。 他们大多数时候没有任何图形界面,所以你别无选择。 在这些情况下,有必要了解命令行的方式。
无鼠标方法
因为 shell 有一个文本界面,所以当你使用它时,你的手会留在键盘上。 这是我在作为开发人员的第一年从未真正考虑过的事情,但这是一个很大的优势。
根据我的经验,避免键盘和鼠标之间的数百次手部动作可以节省大量的认知能量。 当我真正尝试坚持使用键盘时,我惊讶地发现它是多么舒适。 作为奖励,即使我只写购物清单,我也觉得自己像个黑客,只使用键盘和外壳! 那有多棒?
我不得不承认,在尝试之前,我对这个“无鼠标”的想法非常怀疑。 使用我在下面描述的工具,我不必从一天到另一天改变我的所有习惯:您也可以使用鼠标。 但是当他们使用键盘进行管理时,它们真的会发光。
即使从未真正证明过,我也相信留在键盘上会让我们更有效率。 正如《实用程序员》一书所指出的:
“仅使用击键进行常见的编辑操作比鼠标或菜单驱动的命令更有效,因为您的手永远不会离开键盘。”
话虽如此,效率并不是这里的主要目标。 我喜欢呆在键盘上并使用所有这些工具,因为我可以完全专注于手头的任务。 它激励我开始工作并完成任务。
基石:Arch Linux
在我的无鼠标之旅开始时,我的一个新朋友建议我使用 Arch Linux 而不是 Ubuntu。 再一次,怀疑在蔓延,怀疑正在侵入我可怜的大脑。 拱Linux? 您需要完全手动安装和配置这个可怕的 Linux 发行版吗? 这个不稳定的系统成了很多人的笑话?
有时,刻板印象与现实无关,Arch Linux 就是这个想法的完美例子。 我使用过 Windows(从 98 到 7)、macOS,并且我也尝试过其他 Linux 发行版。 毫无疑问,我的结论是:Arch Linux 是最稳定的。
话虽如此,Arch Linux 并不是无鼠标开发环境的要求。 您也可以将本文中描述的所有其他工具与其他 Linux 发行版一起使用。 如果您有适用于 Linux 的 Windows 子系统 (WSL),您还可以将它们与 macOS(i3 除外)或 Windows 一起使用。 但是,在你这样做之前,让我告诉你为什么你应该认真考虑 Arch Linux 。
滚动释放系统
Arch Linux 有一个滚动发布系统。 这意味着您需要经常、每周或每两周更新整个系统。 回到 Ubuntu,它有一个长期的支持系统:你只需要每年更新几次,如果你愿意,甚至可以更少。
许多开发人员认为滚动发布系统会使您的开发环境不稳定,这部分解释了 Arch Linux 的声誉。 但我在六年的日常使用中从来没有遇到过问题,我的朋友们也在使用它。 另一方面,滚动系统的优点是巨大的:
- 我使用的所有应用程序都是最新的。 无需手动编译它们以在需要时获得最新版本。
- 更新系统通常意味着一次引入的更改更少。 因此,发生崩溃的机会也更少。
我告诉你我在 Ubuntu 上的体验以及我在更新它时遇到的崩溃。 Arch Linux 我从来没有遇到过任何问题。
你需要的一切
此外,Arch Linux 的存储库非常庞大。 您很可能会在其中找到所需的所有工具。 如果您不这样做,您可以查看 AUR(Arch 用户存储库),那里还有其他所有内容。 AUR 不是官方存储库,因此在那里找到的应用程序可能存在一些安全问题。 同样,我对他们从来没有任何问题,但这是可能的。 只要您坚持使用官方存储库并且不安装 AUR 中的所有内容和任何内容,您就不会有任何问题。
学习机会
我们还要提一下 Arch Linux 是一个非常小的发行版。 当您安装它时,它不会强加许多无用的应用程序。 说到这,您需要使用 shell 手动安装整个发行版。 这项任务可能令人生畏,但另一方面,您将从经验中学到很多东西。
正如我在本文开头提到的,在系统运行异常或崩溃时,至少了解基于 Linux 的系统如何在后台工作可以为您提供帮助。 它并不像看起来那么复杂,如果您是开发人员,我认为这是强制性的。 如今,Web、您的手机或您的 Raspberry Pie 在 Linux 上运行。
最后但同样重要的是,Arch Wiki 是您可以找到任何与 Linux 相关的最佳位置。 多年来,它对我帮助很大,即使在我使用 Ubuntu 时也是如此。 这是对系统进行故障排除和寻找新工具的好地方。
使用 i3 管理您的 Windows
现在我们回顾了为什么 Arch Linux 可以成为您的无鼠标开发环境的坚实基础,让我们看看我们可以在上面添加什么。
但首先,有一点理论。 操作系统通常具有三层,或多或少相互耦合:
- 内核,直接涉足您计算机的硬件;
- shell ,你或某些应用程序与内核交互的接口;
- 顶部的显示层,如桌面管理器或平铺窗口管理器。
Gnome 或 Unity 都是基于 Linux 的系统的桌面管理器。 他们管理您的窗口和许多其他事情,例如您的状态栏或应用程序启动器。 平铺窗口管理器是桌面管理器的替代品,它们通常更小,更专注于操作窗口。
平铺窗口管理器 i3 确实非常轻巧:我现在在一台使用了十年的计算机(联想 x220)上使用它,它并没有变慢。 它使用起来也很简单,文档很棒,最重要的是,你可以只用键盘来管理你的窗口(如果你愿意的话)。
i3 的基础很简单:您可以在代表整个屏幕的不同工作区中打开窗口。 它与许多 Linux 桌面管理器拥有的虚拟桌面非常相似。 然后,当您打开您喜欢的应用程序时,屏幕将根据屏幕上的窗口数量自动共享。
例如,如果您打开 Firefox,它的窗口将占据屏幕的 100%。 如果您打开三个 Firefox 实例,每个实例将占据 33% 的屏幕。
您还可以更改窗口的布局。 您可以将它们彼此堆叠并通过简单的按键浏览它们,而不是让所有窗口在屏幕上可见。 如果你需要一些“普通”的浮动窗口,你也可以配置它们。
i3 的目标是简化所有窗口的管理。 无需在每次打开新文件时使用鼠标移动它们并调整它们的大小,您可以仅在需要时使用击键来执行相同的操作。
是不是看起来太复杂了? 尝试两天后,我对 i3 的使用效率很高。 我不是天才; 如果我能做到,你也能做到。
蛋糕上的樱桃:就像本文中描述的每个工具一样,您可以自定义 i3 及其击键作为您的心脏内容。
i3 的唯一缺点:它不适用于 macOS。 但也有很好的选择,比如平铺窗口管理器 Amethyst 或 Divvy。
使用 URxvt、tmux 和 tmuxp 升级您的终端
终端是让您访问 shell 的接口。 即使外壳是真正的交易,我们也可以通过几个工具使其更易于使用。
URxvt 的简单之路
我喜欢简单,这也是我喜欢本文中描述的开发环境的部分原因。 说到这,URxvt 是您能找到的最简单的终端之一。 它也快速可靠。 六年来,我从未见过它崩溃甚至减速。 它做了它应该做的事情:允许你使用 shell。 不多也不少。
带有 tmux 的终端多路复用器
即使我喜欢 URxvt 的简单性,我也喜欢拥有一个可以依赖的优秀终端多路复用器,比如 tmux。
什么是终端多路复用器? 它允许您打开包含多个 shell 的会话。 这些会话在后台持续存在:即使您的终端崩溃或意外关闭它,您的 shell 也不会消失。 您可以随时在另一个终端中恢复它们(好像什么都没发生一样)。
这在您的本地计算机上很有用,但在远程服务器上效果更好。 例如,您可以通过 SSH 连接到服务器,运行脚本,关闭 SSH 连接和本地计算机上的终端,然后回家。 由于 tmux,您的 shell 仍在您的服务器上运行,因此您的脚本也将继续运行。
这还不是全部:从某种意义上说,tmux 有点像万事通。 您可以使用它在一个终端中打开包含多个窗格的多个窗口。 您可以将窗口视为整个终端,将窗格视为占据窗口百分比的外壳。
是不是让你想起了i3? 它遵循相同的原则,但它只能创建新的外壳。 这就是为什么许多对 i3 感到满意的用户看不到使用 tmux 的任何意义。 就个人而言,我喜欢两者都用。
与往常一样,您可以使用键盘操作 tmux 的窗口和窗格,并且可以按照您最疯狂的愿望配置 tmux 本身。
tmuxp
假设您想将 tmux 用于您正在开发的破坏性应用程序。 您需要先打开一个终端。 然后,您需要根据需要创建尽可能多的 tmux 窗口,并将这些窗口与您想要的窗格分开。
记住:一个窗格代表一个外壳。 然后,您可以在每个 shell 中运行特定项目所需的所有 CLI:例如,运行 docker 容器或显示一些日志。
但是您也可以将所有这些自动化,这就是tmux 真正强大的地方——在开发环境的上下文中——真正闪耀。 使用另一个名为 tmuxp 的 CLI,您可以在 YAML 配置文件中写下您想要的窗口、窗格和任何命令。 然后,您可以加载此配置并自动创建您自定义的 tmux 会话。
我的每个项目都有这些配置文件之一。 它为我节省了很多时间和精力。 正如我上面所说,这是使用 shell 的主要好处之一。
Editor Plus Shell 等于 IDE
既然 shell 这么强大,为什么不直接在里面运行一个编辑器呢? 为什么不使用 Vim?
与 Arch Linux 一样,Vim 以难学着称。 它更微妙:使用它很容易提高效率,但要掌握它需要很长时间。 如果您运行 Linux 并安装了 Vim,则可以通过在 shell 中运行vimtutor
在20 分钟内学习基础知识。
Vim 提供了许多功能,可以通过无数插件进一步扩展。 此外,您可以使用 Vim 直接与您的 shell 交互,在您的编辑器中使用您想要的任何 CLI。 它将把 Vim 变成一个成熟的 IDE。
Vim 还有一个很大的优势:你可以用它来开发多种编程语言。 每次我需要用 PHP、Golang 或 Clojure 编程时,我都不喜欢在不同的 IDE 之间切换。 界面不同,我需要单独配置这些编辑器中的每一个,并且当我重新安装这些工具时,我无法真正将配置保存在某个地方以再次使用它。
使用 Vim,我可以在同一个编辑器中使用任何我想要的语言进行编码。 与 VS Code 一样,您可以使用 LSP(语言服务器提供程序)为最常见的编程语言(甚至更深奥的语言)启用自动完成、linting 和自动重构。
Vim 也很快。 它不需要很多资源来运行。 我经常在我的旧电脑上打开 6 或 7 个编辑器实例——没有任何问题。 相比之下,我使用 IntelliJ IDE 多年,当我打开其中两个时,我的整个系统开始变慢。 当我同时处理不同的项目时,这真的很实用,比如一堆微服务。
我应该补充一点Vim 是高度可配置的吗? 无需直接在 IDE 中拥有许多功能(包括一些您永远不会使用的功能),您可以选择您真正需要的功能并丢弃您不需要的功能。
一组连贯的击键
如果 Arch Linux 是我的无鼠标开发环境的基石,那么 i3、Zsh、tmux 和 Vim 就是满足我创造性需求的工作台。 它给了我在使用任何其他工具时从未体验过的舒适感。
但是您可能想知道,当您已经可以使用您已经知道的工具的快捷方式时,为什么还要使用所有这些新工具及其按键?
好吧,大多数应用程序的快捷方式通常毫无意义。 这是一串相互没有关系的钥匙。 结果,它们很难记住,并且从一种工具到另一种工具可能会有很大的不同。
我在本文中描述的工具旨在很好地相互配合。 您几乎可以对它们中的每一个使用相同的击键。 只有一个键会有所不同,以便系统知道您要使用什么工具。 它使不同的击键方式更容易记住。
此外,Vim 旨在通过创建一种您可以依赖的简单语言来实现有意义的击键。 例如,为了删除一个单词,您可以点击daw
。 要删除一个段落,它是dap
。 由于许多 CLI 都是基于 Vim 的按键,学习 Vim 将为许多其他 CLI 打开大门。
自动安装您的无鼠标开发环境
手动安装 Arch Linux 可以很好地了解基于 Linux 的系统,但是当您每次想要在新计算机上安装系统时都需要这样做时,它就会变得陈旧。 这就是我创建自己的脚本来安装整个无鼠标开发环境的原因。 他们安装 Arch Linux 以及我在他们的配置中使用的所有工具。 当我需要使用新计算机时,我可以简单地运行这些脚本,瞧!
您准备好成为无鼠标开发人员了吗?
由于灵活性,我有我的开发环境,我也可以轻松地切换工具。 例如,如果我不想再使用 tmux,我可以将其替换为另一个终端多路复用器。 如果我不喜欢 i3 的状态栏或我的应用程序启动器,我也可以替换它们。
正如您可能已经猜到的那样,配置这种系统需要一些时间、动力和努力。 这就是为什么我写了一本书叫“建立你的无鼠标开发环境”。 它详细描述了如何配置所有工具,如何创建脚本以使用一个命令安装整个系统,以及如何根据您的个人需求自定义所有内容。 如果您对 Linux shell 不太了解,它可以让您构建一个自定义项目来熟悉它。
如果您有兴趣,可以在此处找到该书的样本及其整个目录。
我认为确定您是否喜欢这种系统的最佳方法就是尝试一下。 我可以向你保证一件事:一路上你会学到很多东西!
进一步阅读 Smashing Magazine
- “我用了一天的网络,只用了一个键盘,”克里斯·阿什顿
- “机械键盘完整指南”,本·弗莱恩
- “为可访问性提供强有力的案例,”托德·利比
- “Chrome DevTools 中的可访问性”,Umar Hansa