vi执行Linux命令,如何从Vim中访问shell或运行外部命令

您可能已经知道,Vim是功能强大且功能强大的编辑器。 在Howtoing中,我们在Vim上编写了几个教程,涵盖了其基本用法 , 插件以及其他一些有用的功能。 但是鉴于Vim提供的功能,我们总是找到一些有用的东西来分享我们的读者群。

在本教程中,我们将重点介绍如何执行外部命令以及从编辑器窗口访问命令行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中执行外部命令

有时您可能需要在Vim编辑器窗口内执行外部命令。 例如,考虑一种情况,您在Vim中打开了一个文件,进行了一些更改,然后在尝试保存这些更改时,Vim会抛出一个错误,表示您没有足够的权限。

9fce352b9d852b13b42d5dac4537bbeb.png

现在,退出当前的vim会话并再次以足够的权限打开文件将意味着您所做的所有更改都将丢失,因此,您将同意在大多数情况下不是一个选择。 像这样的情况,从编辑器中运行外部命令的能力派上用场。

稍后我们再回到上面的用例(**),但现在我们来了解如何从vim中运行基本的命令。

假设在编辑文件时,您想知道文件所包含的行数,字数和字符数。 为了做到这一点,在Vim的命令模式下,只需输入一个冒号(:),然后是一个bang(!),最后是命令(在这种情况下为'wc'),后跟文件名(使用当前文件的%)。:! wc %

以下是一个例子:

具有上述命令的文件准备执行:

f233f2914e43054ad39394a4f397bcc1.png

这是终端的输出:

24a5a701b61abaab9738985708435ee6.png

看完输出后,按Enter键,您将被带回Vim会话。

在您正在编写代码或脚本,并希望快速知道代码/脚本是否包含任何编译时或语法错误的情况下,此功能可以非常方便。

继续,如果需要将输出添加到文件,请使用':read!' 命令。 以下是一个例子::read ! wc %

'read'命令将外部命令的输出插入正在编辑的文件中当前行下方的新行。 如果需要,您还可以指定特定的行号 - 输出将在特定行之后添加。

例如,以下命令将在文件的第二行之后添加“wc”的输出。:2read ! wc %

注意 : 在最后一行之后使用'$'插入,在第一行之前插入'0'。

现在,回到我们在开始(**)中讨论的usecase,这里的命令将帮助您保存文件,而不需要先关闭它(这意味着没有丢失未保存的更改),然后打开它,说, sudo 。:w ! sudo tee %

d6acfc8359c6d877ec7d63287b948be8.png

访问外壳在Vim

除了执行单个命令之外,您还可以将自己从Vim中的新启动的shell中删除。 为此,您需要做的是从编辑器运行以下命令::shell

要么:sh

并在完成shell工作时键入“exit” - 这将使您重新进入从最初离开的Vim会话。

要记住的漏洞

虽然访问shell的能力肯定在现实世界中有其自己的用途,但它也可以用作特权升级技术。 正如我们之前的教程(在sudoedit中)所解释的那样,即使您提供用户sudo访问权限,只能通过Vim编辑一个文件,他们也可以使用这种技术从编辑器中启动一个新的shell,然后可以做“root”或超级用户。

结论

在Vim中运行外部命令的能力是一个重要的功能,可以在许多情况下派上用场(其中一些我们在本教程中提到过)。 这个功能的学习曲线并不陡峭,所以初学者和有经验的用户都可以利用它。

你现在使用这个功能已经有一段时间了吗? 你有分享的东西吗? 请在下面的意见中留下您的想法。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值