从Vim中访问shell或者运行外部命令的方法

Vim——正如你可能已经了解的那样——是一个包含很多特性的强大的编辑器。我们已经写了好多关于 Vim 的教程,覆盖了 基本用法、 插件, 还有一些 其他的 有用的 特性。鉴于 Vim 提供了多如海洋的特性,我们总能找到一些有用的东西来和我们的读者分享。

在这篇教程中,我们将会重点关注你如何在编辑窗口执行外部的命令,并且访问命令行 shell。

但是在我们开始之前,很有必要提醒一下,在这篇教程中提及到的所有例子、命令行和说明,我们已经在 Ubuntu 14.04 上测试过,我们使用的的 Vim 版本是 7.4 。

在 Vim 中执行外部命令

有的时候,你可能需要在 Vim 编辑窗口中执行外部的命令。例如,想象一下这种场景:你已经在 Vim 中打开了一个文件,并做了一些修改,然后等你尝试保存这些修改的时候,Vim 抛出一个错误说你没有足够的权限。

现在,退出当前的 vim 会话,重新使用足够的权限打开文件将意味着你会丢失所做的所有修改,所以,你可能赞同,在大多数情况不是只有一个选择。像这样的情况,在编辑器内部运行外部命令的能力将会派上用场。

稍后我们再回来上面的用例,但是现在,让我们了解下如何在 vim 中运行基本的命令。

假设你在编辑一个文件,希望知道这个文件包含的行数、单词数和字符数。为了达到这个目的,在 vim 的命令行模式下,只需要输入冒号 :,接下来一个感叹号 !,最后是要执行的命令(这个例子中使用的是 wc)和紧接着的文件名(使用 % 表示当前文件)。

:! wc %

这是一个例子:

填入的上面提及的命令行准备执行:

下面是终端上的输出:

在你看到输出之后,输入回车键,你将会退回到你的 vim 会话中。

你正在编写代码或者脚本,并且希望尽快知道这段代码或者脚本是否包含编译时错误或者语法错误,这个时候,这种特性真的很方便。

继续,如果需求是添加输出到文件中,使用 :read ! 命令。接下来是一个例子:

:read ! wc %

read 命令会把外部命令的输出作为新的一行插入到编辑的文件中的当前行的下面一行。如果你愿意,你也可以指定一个特定的行号——输出将会添加到特定行之后。

例如,下面的命令将会在文件的第二行之后添加 wc 的输出。

:2read ! wc %

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

现在,回到最开始我们讨论的一个用例,下面的命令将会帮助你保存文件而不需要先关闭文件(这将意味着没有保存的内容不会丢失)然后使用 sudo 命令重新打开。

:w ! sudo tee %

在 Vim 中访问 shell

除了可以执行单独的命令,你也可以在 vim 中放入自己新创建的 shell。为了达到这种目的,在编辑器中你必须要做的是运行以下的命令:

:shell

或者:

:sh

当你执行完了你的 shell 任务,输入 exit —— 这将带你回到原来离开的 Vim 会话中。

要谨记的漏洞

虽然在真实世界中,能够访问的 shell 绝对符合它们的用户权限,但是它也可以被用于提权技术。正如我们在早期的一篇文章(在 sudoedit 上)解释的那样,即使你提供给一个用户 sudo 的权限只是通过 Vim 编辑一个文件,他们仍可以使用这项技术从编辑器中运行一个新的 shell,而且他们可以做 root 用户或者管理员用户可以做的所有内容。

总结

能够在 Vim 中运行外部命令在好多场景中(有些场景我们已经在这篇文章中提及了)都是一个很有用的特性。这个功能的学习曲线并不麻烦,所以初学者和有经验的用户都可以好好使用它。

(0)

相关推荐

  • WinXP怎么运行Chkdsk命令 WinXP系统运行Chkdsk命令的方法

    在WinXP系统中,Chkdsk的全称就是Checkdisk,这个也就是磁盘检查的意思.如果WinXP系统的硬盘或U盘出错时,那么就可以使用Chkdsk命令来修复一些硬盘和U盘存储不了数据的问题.那么 ...

  • 快速输入已运行CMD命令的方法

    我们在使用电脑的时候经常会需要用到命令提示符,下面就给大家讲讲快速输入已运行CMD命令的方法.演示前的准备1.第一步,在电脑上打开如图所示的命令提示符.2. 第二步,在窗口中输入第一个指令sc并运行. ...

  • “ipconfig不是内部命令或外部命令”解决方法

    在控制台中输入命令ipconfig的时候,会出现"'ipconfig'不是内部或外部命令,也不是可运行的程序"错误提示.这可能是因为环境变量设置缺失的缘故.本文主要描述了如何通过设 ...

  • Win7系统无法运行bat命令解决方法

    相信很多Win7系统用户之前都接触过bat命令,它是一种批处理文件,可以执行一条或多条命令.很多win7 64位系统用户在使用bat命令时,发现不能运行bat命令,这时候该怎么办??小编就以Win7旗 ...

  • notepad中怎么使用一键运行批处理命令?

    notepad++作为一款知名的文本编辑工具,是广大码农的好伴侣,一些强大的功能需要慢慢摸索.小编最近在研究批处理,notepad++写好之后从cmd中运行,效率有点低,如果能一键运行就完美了.小编网 ...

  • Win8系统中以窗口模式运行Metro应用的方法图解

    在Win8刚出来没多久的时候,很多朋友都喜欢玩Metro应用,但很多朋友不太习惯在全屏模式下运行这些应用,Stardock ModernMix可以在Win8下让Metro应用以窗口模式运行而不是全屏幕 ...

  • 在电脑中怎么查询正在运行的程序?

    许多小伙伴在使用电脑的时候感觉电脑有些卡顿,想要看一下有哪些程序正在运行应该如何操作呢?今天,小编就教大家在电脑中怎么查询正在运行的程序.具体如下:1. 首先,我们在键盘上摁下快捷键[windows+ ...

  • 如何在win10系统中解决管理员阻止运行的问题

    使用Windows10系统电脑的用户,发现打开一个软件,就会收到管理员阻止运行此应用的消息,那么如何解决这一问题呢?小编就来为大家介绍一下吧.win10系统管理员已阻止你运行此应用1. 第一步,按键盘 ...

  • win7下ping不是内部或外部命令

    win7下ping不是内部或外部命令,在使用java设置变量环境时,可能会遇到这样的问题,出现win7下ping不是内部或外部命令,是在设置变量环境是把一些设置删掉了的原因,请看在win7下怎么还原. ...