在 shell 中使用 vi 模式

文本編輯器 Vi 編程語言 Bash Linux中國 2017-04-05

在 shell 中使用 vi 模式

沒接觸過的人和新手可能沒有意識到 bash shell 的默認輸入模式是 Emacs 模式,也就是說命令行中所用的行編輯功能都將使用 Emacs 風格的“鍵盤快捷鍵”。(行編輯功能實際上是由 GNU Readline 進行的。) -- Adam Miller

編譯自: https://opensource.com/article/17/3/fun-vi-mode-your-shell

作者: Adam Miller

譯者: geekpi

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

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

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

在計算和操作系統的龐大生態系統中有很多 shell[3]。然而,在 Linux 世界中,bash[4] 已經成為事實上的標準,並在在撰寫本文時,它是所有主要 Linux 發行版上的默認 shell。因此,它就是我所說的 shell。需要注意的是,bash 在其他類 UNIX 操作系統上也是一個相當受歡迎的選項,所以它可能跟你用的差別不大(對於 Windows 用戶,可以用 cygwin[5])。

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

$ echo "Hello World!"

Hello World!

這是常見的練習,可能每個人都做過。沒接觸過的人和新手可能沒有意識到 bash[6] shell 的默認輸入模式是 Emacs[7] 模式,也就是說命令行中所用的行編輯功能都將使用 Emacs 風格的“鍵盤快捷鍵”[8]。(行編輯功能實際上是由 GNU Readline[9] 進行的。)

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

$ echo "Hello Wrld!"

^

Cursor is here.

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

儘管 Emacs 的鍵盤綁定都不錯,如果你對 Emacs 編輯器熟悉或者發現它們很容易使用也不錯,但是仍有一些人覺得 “vi 風格”的鍵盤綁定更舒服,因為他們經常使用 vi 編輯器(通常是 vim[10] 或 nvim[11])。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 模式的更多信息,請參閱這裡[12]。):

$ echo "Hello Wrld!"

^

Cursor is here.

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

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

set -o vi

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

玩得愉快!


作者簡介:

Adam Miller 是 Fedora 工程團隊成員,專注於 Fedora 發佈工程。他的工作包括下一代構建系統、自動化、RPM 包維護和基礎架構部署。Adam 在山姆休斯頓州立大學完成了計算機科學學士學位與信息保障與安全科學碩士學位。他是一名紅帽認證工程師(Cert#110-008-810),也是開源社區的活躍成員,並對 Fedora 項目(FAS 帳戶名稱:maxamillion)貢獻有著悠久的歷史。


via: https://opensource.com/article/17/3/fun-vi-mode-your-shell

作者:Adam Miller [14] 譯者:geekpi 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出

  • [1]: Fedora 項目 - https://getfedora.org/

  • [2]: shell - https://opensource.com/business/16/3/top-linux-shells

  • [3]: 很多 shell - https://opensource.com/business/16/3/top-linux-shells

  • [4]: bash - https://tiswww.case.edu/php/chet/bash/bashtop.html

  • [5]: cygwin - http://cygwin.org/

  • [6]: bash - https://tiswww.case.edu/php/chet/bash/bashtop.html

  • [7]: Emacs - https://www.gnu.org/software/emacs/

  • [8]: Emacs 風格的“鍵盤快捷鍵” - https://en.wikipedia.org/wiki/GNU_Readline#Emacs_keyboard_shortcuts

  • [9]: GNU Readline - http://cnswww.cns.cwru.edu/php/chet/readline/rltop.html

  • [10]: vim - http://www.vim.org/

  • [11]: nvim - https://neovim.io/

  • [12]: 這裡 - https://en.wikibooks.org/wiki/Learning_the_vi_Editor/Vim/Modes

  • [13]: 交互式 vim 教程 - http://www.openvim.com/tutorial.html

  • [14]: Adam Miller - https://opensource.com/users/maxamillion

相關推薦

推薦中...