我正在尝试让 vim 执行我正在使用键映射编辑的脚本,比如ctrl+ x,所以我在vimrc
:map <C-x> :!exec_file %<CR>
将文件名传递给我编写的脚本,该脚本解析扩展名并调用适当的解释器,到目前为止效果很好。
不过,我想知道是否可以bash
直接用脚本名称调用并让它执行它因为我编辑的大多数脚本都有一个 shebang 行,因此我尝试了这个映射:
:map <C-x> :!bash %<CR>
但它不起作用,是否可以通过将脚本名称传递给 bash 来执行脚本?
答案1
Vim 已经使用 shell(参见:set shell?
)来执行外部命令;带有 shebang 行的脚本应该可以正常工作。执行当前缓冲区的规范方法是
:!./%
(预先./
处理不属于的当前目录PATH
。这假定脚本已经可以执行(:!chmod +x %
,可能在映射/ftplugin 中完成。)
您只需重新执行即可:!!
。此外,还有更高级的解决方案,用于在外部解释器中执行(部分、未保存等)缓冲区内容;请查看vim.org。
答案2
似乎我必须 chmod
不,你不需要。如果你的可执行文件是这样的
#! /bin/bash
ls -l
映射
:map <C-x> :! sh ./% <CR>
将会执行您想要的操作,即使该文件不可执行。