在没有shebang的情况下,在Vim中执行当前文件。

3
我能否在vimrc中添加一个干净的别名,如果文件扩展名是python,则使用python运行当前文件?
目前,我有nnoremap <leader>r :!%:p<Enter>,如this问题所建议的(当我按下\ + r时,它会运行打开的文件)。 对于bash文件,它非常有效,因为惯例是添加shebang行并使文件可执行,但对于python文件,它显然会退出1。
为了解决这个问题,我添加了一个新命令 - command PyBang:call append(0,“#!/ usr / bin / env python”) - 它将python shebang添加到文件的顶部。 问题是,这不是.py文件的惯例,而将它们全部设为可执行似乎需要很多努力。
因此,我正在努力编写一个别名,如果没有扩展名,则运行:!%:p<Enter>,如果文件在缓冲区中有.py扩展名,则在其前面添加python
非常感谢任何想法。

1
你为什么不能创建一个用于运行Python程序的vim命令呢?例如 :! python3 %。或者你的问题是如何检测文件类型,然后选择要运行的内容? - wxz
我基本上想要一个“run”命令,这样我就不用记得为我正在处理的文件使用哪个语言的命令。但是,你提供的解决方案现在正是我正在使用的,所以感谢你!因为这比手动shabanging更容易。 - Callum
使用类似于这个的方法来帮助你让if else语句正常工作。这样你就可以实现“如果是bash,就执行这个操作;如果是python,就执行那个操作”的功能。 - wxz
1
@wxz 这正是我在寻找的。看了一下,我可能已经在这里找到了答案(链接:https://vi.stackexchange.com/questions/24898/autocmd-with-a-python-file-not-working)。 - Callum
@wxz,你可以将其作为答案放入,我会很高兴地接受它。我现在正在使用autocmd filetype python nnoremap <leader>r :!python %:p<Enter>,这似乎是有效的,但仍需要测试。干杯 - Callum
1个回答

3

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

: ! python3 %将在vim之外的任何shell中运行当前文件%以及python3

您可以结合vim脚本使用此功能来创建自己的快捷方式。

要将此与当前的bash函数结合使用,您需要在vim函数中使用条件逻辑来检测文件类型(有关如何处理文件类型及其检测,请参见这里这里)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接