您可能已经知道,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会抛出一个错误,表示您没有足够的权限。

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

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

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

以下是一个例子:

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

这是终端的输出:

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

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

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

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

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

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

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

访问外壳在Vim

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

要么:sh

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

要记住的漏洞

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

结论

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

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

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

  1. linux默认csh修改命令,Solaris中默认Shell的修改以及命令行补全的设置

    Solaris中默认Shell的修改以及命令行补全的设置 发布时间:2008-02-18 00:01:41来源:红联作者:qtsmy Solaris10 x86虽然可以跑起来,但有很多方面都用这和以前 ...

  2. 已配置好环境,在CMD中输入adb命令,还是提示“‘adb‘ 不是内部或外部命令,也不是可运行程序或批处理文件”的解决方法

    前提:win10环境,已在系统变量中配置好ANDROID_HOME,且确认无误,cmd输入adb命令,还是提示"'adb' 不是内部或外部命令,也不是可运行程序或批处理文件" 百度 ...

  3. shell 知:外部命令

    文章目录 1. 介绍 2. 外部过滤器,程序和命令 2.1. 基本命令 2.1.1. ls 2.1.2. cat,tac 2.1.3. rev 2.1.4. cp 2.1.5. mv 2.1.6. r ...

  4. python异步调用shell_异步 - 如何从Python异步运行外部命令?

    异步 - 如何从Python异步运行外部命令? 我需要从Python脚本异步运行shell命令. 通过这个我的意思是我希望我的Python脚本在外部命令关闭时继续运行并执行它需要做的任何事情. 我看过 ...

  5. 使用adb 命令时提示“adb”既不是内部或外部命令,也不是可运行的程序

    在使用adb 命令时提示"adb"既不是内部或外部命令,也不是可运行的程序 一般出现这种是adb环境变量没配置,选择我的电脑->属性->高级系统配置, 之后选择环境变量 ...

  6. linux vi 选中某一列,在 Vim 中进行文本选择操作和使用标志

    基于图形界面的文本或源代码编辑器,提供了一些诸如文本选择的功能.我是想说,可能大多数人不觉得这是一个功能.不过像 Vim 这种基于命令行的编辑器就不是这样.当你仅使用键盘操作 Vim 的时候,就需要学 ...

  7. powershell执行c语言文件,c语言中调用shell脚本

    [转]c语言中调用shell脚本 关于在c语言中调用shell脚本,先是在百度上百度了一下 下面的这个应该是说的比较详细的 dreamerkxz.blog.163.com/blog/static/82 ...

  8. linux获取android界面,Android中 adb shell ps 查看手机中进程信息

    adb shell 进入手机后,执行ps就能显示手机里所有正在运行的进程. 一.ps命令详细说明 1,ps的命令参数:-t -x,-P,-p,-c [pid|name] -t显示进程下的线程列表 -x ...

  9. 在WINCE5.0中应用CMD(比如运行PING命令)

    ********************************LoongEmbedded******************************** 作者:LoongEmbedded(kandi ...

最新文章

  1. Java TreeMap 源码解析
  2. C++设计模式7--外观模式--The Client don't want to know
  3. 微软云Azure训练营 | 八城联动,全球盛会
  4. restful风格使用小例
  5. (王道408考研数据结构)第五章树-第三节3:线索二叉树
  6. linux video属性_Linux 下Video 的制作方法
  7. cacti安装的一个错误
  8. Illustrator 教程,如何在 Illustrator 中保存项目?
  9. 10000个虎年限定版红包封面!给!
  10. 数据有效性 动态选择
  11. 左/右移运算符,循环左/右移运算
  12. Denoising point sets via L0 minimization
  13. 【论文】联邦学习区块链 论文集(三)
  14. Android系统中如何得到各种格式的文件正文(office文件,PDF,邮件,html,zip等)
  15. 市场营销中4P对应4C理论
  16. 常用计算机的外设有哪些,电脑外设设备有哪些 电脑外设产品什么品牌好
  17. linux ftp下载文件到本地,如何使用get指令利用FTP下载文件到本地
  18. WARNING:not built warning
  19. PhotoZoom Pro中文免费版电脑版下载V.2020.6 无损放大图片
  20. burpsuite爆破登陆密码

热门文章

  1. 启明云端直播来了!真的来了!15号晚7:30分启明云端带着8ms菇凉正式亮相立创直播,带你一起畅玩彩屏!参与直播互动的小伙伴将会得到红包大奖及获得SigmarstarSSD201开发板\核心板的机会
  2. ESP32又有新玩法了,启明云端把它带入到冷门行业--测试治具
  3. java邻接图_Java数据结构 - 图(邻接表存储)
  4. linux base64 文件大小,linux下使用base64进行加密和解密
  5. 生成网页没有标题_网页设计公司有哪些?用这个快速建站!
  6. centos redis验证_centos7下安装redis-4.0.2
  7. qsort()编译器自带快速排序的用法
  8. zzlinux运维自动化shell脚本小工具
  9. MFC 网络编程 -- 总结
  10. 不同局域网内经Internet的P2P通信技术总结