vi执行Linux命令,如何从Vim中访问shell或运行外部命令
您可能已經(jīng)知道,Vim是功能強(qiáng)大且功能強(qiáng)大的編輯器。 在Howtoing中,我們在Vim上編寫了幾個教程,涵蓋了其基本用法 , 插件以及其他一些有用的功能。 但是鑒于Vim提供的功能,我們總是找到一些有用的東西來分享我們的讀者群。
在本教程中,我們將重點(diǎn)介紹如何執(zhí)行外部命令以及從編輯器窗口訪問命令行shell。
But before we start doing that, it's worth mentioning that?all the examples, commands, and instructions mentioned in this tutorial have been tested on Ubuntu 14.04, and the Vim version we've used is 7.4.
在Vim中執(zhí)行外部命令
有時您可能需要在Vim編輯器窗口內(nèi)執(zhí)行外部命令。 例如,考慮一種情況,您在Vim中打開了一個文件,進(jìn)行了一些更改,然后在嘗試保存這些更改時,Vim會拋出一個錯誤,表示您沒有足夠的權(quán)限。
現(xiàn)在,退出當(dāng)前的vim會話并再次以足夠的權(quán)限打開文件將意味著您所做的所有更改都將丟失,因此,您將同意在大多數(shù)情況下不是一個選擇。 像這樣的情況,從編輯器中運(yùn)行外部命令的能力派上用場。
稍后我們再回到上面的用例(**),但現(xiàn)在我們來了解如何從vim中運(yùn)行基本的命令。
假設(shè)在編輯文件時,您想知道文件所包含的行數(shù),字?jǐn)?shù)和字符數(shù)。 為了做到這一點(diǎn),在Vim的命令模式下,只需輸入一個冒號(:),然后是一個bang(!),最后是命令(在這種情況下為'wc'),后跟文件名(使用當(dāng)前文件的%)。:! wc %
以下是一個例子:
具有上述命令的文件準(zhǔn)備執(zhí)行:
這是終端的輸出:
看完輸出后,按Enter鍵,您將被帶回Vim會話。
在您正在編寫代碼或腳本,并希望快速知道代碼/腳本是否包含任何編譯時或語法錯誤的情況下,此功能可以非常方便。
繼續(xù),如果需要將輸出添加到文件,請使用':read!' 命令。 以下是一個例子::read ! wc %
'read'命令將外部命令的輸出插入正在編輯的文件中當(dāng)前行下方的新行。 如果需要,您還可以指定特定的行號 - 輸出將在特定行之后添加。
例如,以下命令將在文件的第二行之后添加“wc”的輸出。:2read ! wc %
注意 : 在最后一行之后使用'$'插入,在第一行之前插入'0'。
現(xiàn)在,回到我們在開始(**)中討論的usecase,這里的命令將幫助您保存文件,而不需要先關(guān)閉它(這意味著沒有丟失未保存的更改),然后打開它,說, sudo 。:w ! sudo tee %
訪問外殼在Vim
除了執(zhí)行單個命令之外,您還可以將自己從Vim中的新啟動的shell中刪除。 為此,您需要做的是從編輯器運(yùn)行以下命令::shell
要么:sh
并在完成shell工作時鍵入“exit” - 這將使您重新進(jìn)入從最初離開的Vim會話。
要記住的漏洞
雖然訪問shell的能力肯定在現(xiàn)實(shí)世界中有其自己的用途,但它也可以用作特權(quán)升級技術(shù)。 正如我們之前的教程(在sudoedit中)所解釋的那樣,即使您提供用戶sudo訪問權(quán)限,只能通過Vim編輯一個文件,他們也可以使用這種技術(shù)從編輯器中啟動一個新的shell,然后可以做“root”或超級用戶。
結(jié)論
在Vim中運(yùn)行外部命令的能力是一個重要的功能,可以在許多情況下派上用場(其中一些我們在本教程中提到過)。 這個功能的學(xué)習(xí)曲線并不陡峭,所以初學(xué)者和有經(jīng)驗(yàn)的用戶都可以利用它。
你現(xiàn)在使用這個功能已經(jīng)有一段時間了嗎? 你有分享的東西嗎? 請?jiān)谙旅娴囊庖娭辛粝履南敕ā?/p>
總結(jié)
以上是生活随笔為你收集整理的vi执行Linux命令,如何从Vim中访问shell或运行外部命令的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux Cp 忽略报错信息,linu
- 下一篇: 富士通怎么用u盘启动 富士通如何使用U盘