如何从Vim中访问shell或者运行外部命令
这篇文章给大家分享的是有关如何从Vim中访问shell或者运行外部命令的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
在 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中访问shell或者运行外部命令"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!