【问题标题】:Execute current file in Vim without shebang在没有 shebang 的情况下在 Vim 中执行当前文件
【发布时间】:2021-06-29 11:32:36
【问题描述】:

是否有一个干净的别名可以放入我的 vimrc 中,如果有 python 扩展,它将使用 python 运行当前文件?

目前我有nnoremap <leader>r :!%:p<Enter> 问题中所建议的nnoremap <leader>r :!%:p<Enter>(当我点击 \+r 时,它会运行打开的文件)。它适用于 bash 文件,其中约定是添加一个 shebang 行并使文件可执行,但对于 python 文件,它显然退出 1。

作为一种解决方法,我添加了一个新命令 - command PyBang :call append(0, "#!/usr/bin/env python") - 在文件顶部添加一个 python shebang。问题是这并不是 .py 文件的真正约定,并且出于某种原因,使它们全部可执行似乎需要付出很多努力。

所以我正在努力编写一个别名,如果没有扩展名,它将运行 :!%:p<Enter>,如果缓冲区中的文件有 .py 扩展名,则在前面加上 python

非常感谢任何想法。

【问题讨论】:

  • 有什么原因你不能创建一个 vim 命令来运行 python 程序? :! python3 % 例如。或者您的问题是关于如何检测您的文件是什么文件类型,然后选择运行什么?
  • 我基本上想要一个“运行”命令,因此我不必记住每种语言使用哪个命令来处理我正在处理的文件。但是,您的解决方案是我目前正在使用的解决方案,因此感谢您!因为它比破坏一切更容易
  • 使用this 之类的东西来帮助您使if else 语句正常工作。所以你可以有“if bash, do this; if python do this;”
  • @wxz 这正是我想要的。看了之后我可能找到了答案here
  • @wxz,请随时将其作为答案,我会很乐意接受。我现在正在使用autocmd filetype python nnoremap <leader>r :!python %:p<Enter>,它似乎正在工作,但仍需要测试。干杯

标签: python vim shebang


【解决方案1】:

最简单的方法是使用 vim 的感叹号来运行 shell 命令。例如,

: ! python3 % 将在 vim 外部运行当前文件 %python3,无论你在哪个 shell 中。

您可以将它与 vim 脚本结合使用,为该命令创建自己的快捷方式。

要将其与您当前的 bash 函数结合起来,您需要在 vim 函数中使用条件逻辑来检测文件类型(请参阅 herehere 了解如何处理文件类型及其检测)

【讨论】:

    猜你喜欢
    • 2010-11-04
    • 1970-01-01
    • 2018-05-21
    • 1970-01-01
    • 2017-02-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多