Vim:执行当前文件?

Rob*_*ino 64 vim

如果我有一个带有shebang行的文件(例如#!/bin/bash)在Vim中打开并且该文件具有执行权限(即chmod +x),我知道我可以键入它来执行它而无需离开编辑器:

:! %:p
Run Code Online (Sandbox Code Playgroud)
  • : 用于命令模式
  • ! 运行shell命令
  • % 引用当前缓冲区中的文件
  • :p 使用当前文件的完整路径

这个频繁的任务是否有更短的捷径?

例如,有一个ZZ快捷方式:wq

rom*_*inl 58

:!%:p
Run Code Online (Sandbox Code Playgroud)

没有空格,更短.

如果您想要更短的快捷方式,可以创建自定义映射:

nnoremap <F9> :!%:p
Run Code Online (Sandbox Code Playgroud)

或者更"笨拙":

nnoremap <leader>r :!%:p
Run Code Online (Sandbox Code Playgroud)

  • 使用nnoremap <F9>:!%:p <Enter>以减轻每次按Enter的负担. (17认同)
  • 使用`nnoremap <F9>:!%:p <Enter> <Enter>`也跳过`在执行脚本后按ENTER或键入命令继续` (3认同)
  • 我喜欢每次执行都有一个新的终端,这样我就不会从之前的运行中获得与当前运行相混淆的输出。为此,您可以使用“nnoremap &lt;F9&gt; :!clear &amp;&amp; %:p&lt;Enter&gt;” (2认同)

Jam*_*ore 12

如果您尚未设置权限,则可以运行:

:! sh %
Run Code Online (Sandbox Code Playgroud)


nul*_*ser 11

如果您的文件名/目录路径中包含空格,则以前的答案都不起作用.简单的修复.

:!"%:p"
Run Code Online (Sandbox Code Playgroud)


Ing*_*kat 7

在你执行了一次之后,一个短路:!!将重复它.


jpm*_*muc 6

您可以将键映射添加到 .vimrc

map <F5> :!%
Run Code Online (Sandbox Code Playgroud)


arm*_*scu 5

启动 vi 时,明确指定文件路径,例如“vi ./blablabla”

vi ./yourscript.pl
Run Code Online (Sandbox Code Playgroud)

然后开始 !%

另一种变体是像这样调用 vi 命令

!./%
Run Code Online (Sandbox Code Playgroud)