Vim 文件类型 if 语句不起作用

Vim filetype if statement not working

在我的 ~/.vimrc 中,我有一个 if 语句来确定打开的文件是否是 python 文件:

if (&ft=='python')
    map <F9> <esc>:w<enter>:!python3 '%'<enter>
endif

目标是如果文件是 python 文件,则将 python 执行命令绑定到 F9,但是当我在 .py 文件中按 F9 时,没有任何反应。我取出了 if 语句,它起作用了。出了什么问题?

改用类似的方法:

au FileType python map <buffer> <F9> <esc>:w<bar>!python3 '%'<cr>

您的 .vimrc 配置文件仅在启动时运行一次。因此,如果您此时进行 if 测试,它将不起作用,因为当前没有 python 文件被编辑。

但是您可以使用 .vimrc 设置一个 自动 行为:vim 每次遇到特殊情况时都会执行的操作。条件可以是你的情况:"A new file is being editing, and its file type is 'python'"。参见 :h :au

在像您这样的情况下,在 :map 命令中添加 <buffer> 参数很有用:它将映射范围限制为仅当前缓冲区:因此当您按下 F9 在 non-python 缓冲区上,不会触发映射。

编辑:
在我的第一个答案中,我还删除了您命令中的<esc>但是也许我对此有误,因为它会导致视觉模式出现问题,所以我把它再次。你要在可视化模式下测试,我没做。