天天看點

在shell中使用vi模式

在shell中使用vi模式

介紹在指令行編輯中使用 vi 模式。

作為一名大型開源社群的參與者,更确切地說,作為 fedora 項目的成員,我有機會與許多人會面并讨論各種有趣的技術主題。我最喜歡的主題是“指令行”或者說 shell,因為了解人們如何熟練使用 shell 可以讓你深入地了解他們的想法,他們喜歡什麼樣的工作流程,以及某種程度上是什麼激發了他們的靈感。許多開發和運維人員在網際網路上公開分享他們的“ dot 檔案”(他們的 shell 配置檔案的常見俚語),這将是一個有趣的協作機會,讓每個人都能從對指令行有豐富經驗的人中學習提示和技巧并分享快捷方式以及有效率的技巧。

今天我在這裡會為你介紹 shell 中的 vi 模式。

在計算和作業系統的龐大生态系統中有很多 shell。然而,在 linux 世界中,bash 已經成為事實上的标準,并在在撰寫本文時,它是所有主要 linux 發行版上的預設 shell。是以,它就是我所說的 shell。需要注意的是,bash 在其他類 unix 作業系統上也是一個相當受歡迎的選項,是以它可能跟你用的差别不大(對于 windows 使用者,可以用 cygwin)。

在探索 shell 時,首先要做的是在其中輸入指令并得到輸出,如下所示:

$ echo "hello world!"

hello world! 

這是常見的練習,可能每個人都做過。沒接觸過的人和新手可能沒有意識到 bash shell 的預設輸入模式是 emacs 模式,也就是說指令行中所用的行編輯功能都将使用 emacs 風格的“鍵盤快捷鍵”。(行編輯功能實際上是由 gnu readline 進行的。)

例如,如果你輸入了 echo "hello wrld!",并意識到你想要快速跳回一個單詞(空格分隔)來修改打字錯誤,而無需按住左箭頭鍵,那麼你可以同時按下 alt+b,光标會将向後跳到 w。

$ echo "hello wrld!" 

              ^ 

        cursor is here. 

這隻是使用提供給 shell 使用者的諸多 emacs 快捷鍵組合之一完成的。還有其他更多東西,如複制文本、粘貼文本、删除文本以及使用快捷方式來編輯文本。使用複雜的快捷鍵組合并記住可能看起來很愚蠢,但是在使用較長的指令或從 shell 曆史記錄中調用一個指令并想再次編輯執行時,它們可能會非常強大。

盡管 emacs 的鍵盤綁定都不錯,如果你對 emacs 編輯器熟悉或者發現它們很容易使用也不錯,但是仍有一些人覺得 “vi 風格”的鍵盤綁定更舒服,因為他們經常使用 vi 編輯器(通常是 vim 或 nvim)。bash shell(再說一次,通過 gnu readline)可以為我們提供這個功能。要啟用它,需要執行指令 $ set -o vi。

就像魔術一樣,你現在處于 vi 模式了,現在可以使用 vi 風格的鍵綁定來輕松地進行編輯,以便複制文本、删除文本、并跳轉到文本行中的不同位置。這與 emacs 模式在功能方面沒有太大的不同,但是它在你如何與 shell 進行互動執行操作上有一些差别,根據你的喜好這是一個強大的選擇。

我們來看看先前的例子,但是在這種情況下一旦你在 shell 中進入 vi 模式,你就處于 insert 模式中,這意味着你可以和以前一樣輸入指令,現在點選 esc 鍵,你将處于 normal 模式,你可以自由浏覽并進行文字修改。

看看先前的例子,如果你輸入了 echo "hello wrld!",并意識到你想跳回一個單詞(再說一次,用空格分隔的單詞)來修複那個打字錯誤,那麼你可以點選 esc 從 insert 模式變為 normal 模式。然後,您可以輸入 b(即 shift+b),光标就能像以前那樣回到前面了。(有關 vi 模式的更多資訊,請參閱這裡。):

現在,對于 vi/vim/nvim 使用者來說,你會驚喜地發現你可以一直使用相同的快捷鍵,而不僅僅是在編輯器中編寫代碼或文檔的時候。如果你從未了解過這些,并且想要了解更多,那麼我可能會建議你看看這個互動式 vim 教程,看看 vi 風格的編輯是否有你所不知道的。

如果你喜歡在此風格下與 shell 互動,那麼你可以在主目錄中的 ~/.bashrc 檔案底部添加下面的行來持久設定它。

set -o vi 

對于 emacs 模式的使用者,希望這可以讓你快速并愉快地看到 shell 的“另一面”。在結束之前,我認為每個人都應該使用任意一個讓他們更有效率的編輯器和 shell 行編輯模式,如果你使用 vi 模式并且這篇文章給你展開了新的一頁,那麼恭喜你!現在就變得更有效率吧。

作者:adam miller

來源:51cto

繼續閱讀