如何構建自己的無鼠標開發環境

已發表: 2022-03-10
快速總結 ↬以 shell 為基石構建開發環境提供了多種好處。 您可以使用相互匹配的工具,您可以根據自己的需要自定義所有內容,最重要的是,您可以使用鍵盤控制整個開發環境。 這可以節省大量認知能量並提供愉快的用戶體驗。

曾幾何時,在軟件開發的神奇土地上,有一位年輕的開發人員,你卑微的僕人,第一次發現了 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 及其使用頻率。

Linux 外殼
Linux 外殼。 (大預覽)

那裡有許多可用的 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 可以成為您的無鼠標開發環境的堅實基礎,讓我們看看我們可以在上面添加什麼。

但首先,有一點理論。 操作系統通常具有三層,或多或少相互耦合:

  1. 內核,直接涉足您計算機的硬件;
  2. shell ,你或某些應用程序與內核交互的接口;
  3. 頂部的顯示層,如桌面管理器或平鋪窗口管理器。

Gnome 或 Unity 都是基於 Linux 的系統的桌面管理器。 他們管理您的窗口和許多其他事情,例如您的狀態欄或應用程序啟動器。 平鋪窗口管理器是桌面管理器的替代品,它們通常更小,更專注於操作窗口。

平鋪窗口管理器 i3 確實非常輕巧:我現在在一台使用了十年的計算機(聯想 x220)上使用它,它並沒有變慢。 它使用起來也很簡單,文檔很棒,最重要的是,你可以只用鍵盤來管理你的窗口(如果你願意的話)。

i3 的基礎很簡單:您可以在代表整個屏幕的不同工作區中打開窗口。 它與許多 Linux 桌面管理器擁有的虛擬桌面非常相似。 然後,當您打開您喜歡的應用程序時,屏幕將根據屏幕上的窗口數量自動共享。

例如,如果您打開 Firefox,它的窗口將佔據屏幕的 100%。 如果您打開三個 Firefox 實例,每個實例將佔據 33% 的屏幕。

i3 帶火狐窗口
i3 帶火狐窗口。 (大預覽)

您還可以更改窗口的佈局。 您可以將它們彼此堆疊並通過簡單的按鍵瀏覽它們,而不是讓所有窗口在屏幕上可見。 如果你需要一些“普通”的浮動窗口,你也可以配置它們。

i3 與 Firefox 窗口堆疊
i3 與 Firefox 窗口堆疊。 (大預覽)

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 的任何意義。 就個人而言,我喜歡兩者都用。

具有 4 個窗口和 4 個窗格的 Tmux
具有 4 個窗口和 4 個窗格的 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 中運行vimtutor20 分鐘內學習基礎知識

Vim 提供了許多功能,可以通過無數插件進一步擴展。 此外,您可以使用 Vim 直接與您的 shell 交互,在您的編輯器中使用您想要的任何 CLI。 它將把 Vim 變成一個成熟的 IDE。

Vim 還有一個很大的優勢:你可以用它來開發多種編程語言。 每次我需要用 PHP、Golang 或 Clojure 編程時,我都不喜歡在不同的 IDE 之間切換。 界面不同,我需要單獨配置這些編輯器中的每一個,並且當我重新安裝這些工具時,我無法真正將配置保存在某個地方以再次使用它。

使用 Vim,我可以在同一個編輯器中使用任何我想要的語言進行編碼。 與 VS Code 一樣,您可以使用 LSP(語言服務器提供程序)為最常見的編程語言(甚至更深奧的語言)啟用自動完成、linting 和自動重構。

Vim 在行動
Vim 在行動。 (大預覽)

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