您的位置:首頁>科技>正文

如何從 Vim 中訪問 shell 或者運行外部命令

能夠在 Vim 中運行外部命令在好多場景中(有些場景我們已經在這篇文章中提及了)都是一個很有用的特性。 這個功能的學習曲線並不麻煩,

所以初學者和有經驗的用戶都可以好好使用它。 -- Himanshu Arora

本文導航

-在 Vim 中執行外部命令 …… 17%

-在 Vim 中訪問 shell …… 67%

-要謹記的漏洞 …… 75%

-總結 …… 83%

編譯自: https://www.howtoforge.com/tutorial/how-to-access-shell-or-run-external-commands-from-within-vim/

作者: Himanshu Arora

譯者: yangmingming

Vim——正如你可能已經瞭解的那樣——是一個包含很多特性的強大的編輯器。 我們已經寫了好多關於 Vim 的教程, 覆蓋了 基本用法[1]、 外掛程式[2], 還有一些 其他的[3] 有用的[4] 特性。 鑒於 Vim 提供了多如海洋的特性, 我們總能找到一些有用的東西來和我們的讀者分享。

在這篇教程中, 我們將會重點關注你如何在編輯視窗執行外部的命令, 並且訪問命令列 shell。

但是在我們開始之前, 很有必要提醒一下, 在這篇教程中提及到的所有例子、命令列和說明, 我們已經在 Ubuntu 14.04 上測試過, 我們使用的的 Vim 版本是 7.4 。

在 Vim 中執行外部命令

有的時候,

你可能需要在 Vim 編輯視窗中執行外部的命令。 例如, 想像一下這種場景:你已經在 Vim 中打開了一個檔, 並做了一些修改, 然後等你嘗試保存這些修改的時候, Vim 拋出一個錯誤說你沒有足夠的許可權。

在 Vim 中執行命令列

現在, 退出當前的 vim 會話, 重新使用足夠的許可權打開檔將意味著你會丟失所做的所有修改, 所以, 你可能贊同, 在大多數情況不是只有一個選擇。 像這樣的情況, 在編輯器內部運行外部命令的能力將會派上用場。

稍後我們再回來上面的用例, 但是現在, 讓我們瞭解下如何在 vim 中運行基本的命令。

假設你在編輯一個檔, 希望知道這個檔包含的行數、單詞數和字元數。 為了達到這個目的, 在 vim 的命令列模式下,

只需要輸入冒號 :, 接下來一個感嘆號 !, 最後是要執行的命令(這個例子中使用的是 wc)和緊接著的檔案名(使用 % 表示當前檔)。

:! wc %

這是一個例子:

填入的上面提及的命令列準備執行:

命令準備在 vim 中執行

下面是終端上的輸出:

命令輸出

在你看到輸出之後,

輸入回車鍵, 你將會退回到你的 vim 會話中。

你正在編寫代碼或者腳本, 並且希望儘快知道這段代碼或者腳本是否包含編譯時錯誤或者語法錯誤, 這個時候, 這種特性真的很方便。

繼續, 如果需求是添加輸出到檔中, 使用 :read ! 命令。 接下來是一個例子:

:read ! wc %

read 命令會把外部命令的輸出作為新的一行插入到編輯的檔中的當前行的下面一行。 如果你願意, 你也可以指定一個特定的行號——輸出將會添加到特定行之後。

例如, 下面的命令將會在檔的第二行之後添加 wc 的輸出。

:2read ! wc %

注意: 使用 $ 在最後一行插入, 0 在第一行前面插入。

現在, 回到最開始我們討論的一個用例, 下面的命令將會幫助你保存檔而不需要先關閉檔(這將意味著沒有保存的內容不會丟失)然後使用 sudo[5] 命令重新打開。

:w ! sudo tee %

在 Vim 中訪問 shell

除了可以執行單獨的命令, 你也可以在 vim 中放入自己新創建的 shell。 為了達到這種目的, 在編輯器中你必須要做的是運行以下的命令:

:shell

或者:

:sh

當你執行完了你的 shell 任務, 輸入 exit —— 這將帶你回到原來離開的 Vim 會話中。

要謹記的漏洞

雖然在真實世界中, 能夠訪問的 shell 絕對符合它們的用戶許可權, 但是它也可以被用於提權技術。 正如我們在早期的一篇文章(在 sudoedit 上)解釋的那樣, 即使你提供給一個用戶 sudo 的許可權只是通過 Vim 編輯一個檔, 他們仍可以使用這項技術從編輯器中運行一個新的 shell, 而且他們可以做 root 用戶或者管理員使用者可以做的所有內容。

總結

能夠在 Vim 中運行外部命令在好多場景中(有些場景我們已經在這篇文章中提及了)都是一個很有用的特性。 這個功能的學習曲線並不麻煩,所以初學者和有經驗的用戶都可以好好使用它。

你現在使用這個特性有一段時間了嗎?你是否有一些東西想分享呢?請在下面的評論中留下你的想法。

via: https://www.howtoforge.com/tutorial/how-to-access-shell-or-run-external-commands-from-within-vim/

作者:Himanshu Arora[6] 譯者:yangmingming 校對:wxy

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

[1]: 基本用法 - https://www.howtoforge.com/vim-basics

[2]: 外掛程式 - https://www.howtoforge.com/tutorial/vim-editor-plugins-for-software-developers-3/

[3]: 其他的 - https://www.howtoforge.com/tutorial/vim-modeline-settings/

[4]: 有用的 - https://linux.cn/article-8224-1.html

[5]: sudo - /tag-sudo.html

[6]: Himanshu Arora - https://www.howtoforge.com/tutorial/how-to-access-shell-or-run-external-commands-from-within-vim/

這個功能的學習曲線並不麻煩,所以初學者和有經驗的用戶都可以好好使用它。

你現在使用這個特性有一段時間了嗎?你是否有一些東西想分享呢?請在下面的評論中留下你的想法。

via: https://www.howtoforge.com/tutorial/how-to-access-shell-or-run-external-commands-from-within-vim/

作者:Himanshu Arora[6] 譯者:yangmingming 校對:wxy

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

[1]: 基本用法 - https://www.howtoforge.com/vim-basics

[2]: 外掛程式 - https://www.howtoforge.com/tutorial/vim-editor-plugins-for-software-developers-3/

[3]: 其他的 - https://www.howtoforge.com/tutorial/vim-modeline-settings/

[4]: 有用的 - https://linux.cn/article-8224-1.html

[5]: sudo - /tag-sudo.html

[6]: Himanshu Arora - https://www.howtoforge.com/tutorial/how-to-access-shell-or-run-external-commands-from-within-vim/

Next Article
喜欢就按个赞吧!!!
点击关闭提示