【问题标题】:How to configure .vimrc for Python code without .py filename extension?如何为没有 .py 文件扩展名的 Python 代码配置 .vimrc?
【发布时间】:2013-02-24 15:12:45
【问题描述】:

所以,我对 Python 的 .vimrc 配置非常满意 - 除了我开始为脚本省略 .py 后缀,现在 vim 不知道我正在编辑的文件是 Python 文件。

澄清:我已经确认 vim 知道我正在使用 :echo &文件类型 报告回'python'。

所以,真正的问题是,当我目前为此目的使用文件扩展名时,如何分配特定于 python 的行为(见下文)。可以用文件类型驱动吗?两者都需要吗?

关于缺少后缀 - 我的代码仅适用于 unix 主机,这很常见,我喜欢隐藏实现细节,以便以后可以假设更改实现。

这是我的 .vimrc 的一小部分:

au BufRead,BufNewFile *py,*pyw   set tabstop=4
au BufRead,BufNewFile *.py,*pyw  set shiftwidth=4
au BufRead,BufNewFile *.py,*.pyw set expandtab
au BufRead,BufNewFile *.py,*pyw  set softtabstop=4
au BufRead,BufNewFile *.py,*.pyw set textwidth=79

【问题讨论】:

    标签: python vi


    【解决方案1】:

    为没有任何扩展名的文件启用特定于 python 的设置的关键是启用filetype plugin,并且可以选择教 Vim Python 文件的外观。

    修改这些文件:

    $HOME/.vimrc

    在 Vim 中启用文件类型插件。这允许将特定于语言的设置放入$HOME/.vim/ftplugin/ 目录。这些设置基于文件类型,而不是文件扩展名。

    filetype plugin on
    syntax on
    

    $HOME/.vim/scripts.vim

    教 Vim Python 文件长什么样。在这个例子中,如果文件在第一行的某处包含python 字符串,Vim 会将文件视为 python 脚本。您可以在此处轻松调整正则表达式以包含更高级的检查。

    请注意did_filetype() 确保第一行中没有python 的带有.py 扩展名的文件仍被视为python 脚本。

    if did_filetype()
        finish
    endif
    if getline(1) =~ '.*python.*'
        setfiletype python
    endif
    

    $HOME/.vim/ftplugin/python.vim

    最后,将所有 python 特定的设置放在这里:

    setlocal tabstop=4
    setlocal shiftwidth=4
    setlocal expandtab
    setlocal softtabstop=4
    setlocal textwidth=79
    

    更多信息:

    如果文件有一些标准的python头文件,则不需要修改scripts.vim,例如#!/usr/bin/python#!/usr/bin/env python

    此启发式正在/usr/share/vim/vim73/scripts.vim 中执行(您的路径可能不同,具体取决于 Vim 版本和安装位置)。

    【讨论】:

    • 谢谢 - 它没有解决手头的问题,但看起来很有趣。
    • 没问题。我已经通过其他选项扩展了我的答案 - 希望这些帮助。
    • 谢谢 - 看来我需要选项 #1。你能展示它在 .vimrc 文件中的样子吗?我认为我必须打开该检测,然后使用文件类型和文件扩展名(?)设置各种功能(?)
    • 我很惊讶它默认不适合你。你的 Vim 版本是多少?它是用 python 支持编译的吗? (见:版本)。如果所有其他方法都失败了,您始终可以将选项 #2 与 'if getline(1) =~ '^#!/usr/bin/python$'' 或类似内容一起使用。
    • 顺便说一句,对于选项 #1,Vim 的文件类型检测实现位于 /usr/share/vim 下的 'scripts.vim' 中(路径可能不同)。我的 Vim 安装通过匹配文件的第一行来检测文件语言,所以它实际上是我们讨论的选项 #2。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-20
    • 2013-05-26
    • 1970-01-01
    相关资源
    最近更新 更多