如何在没有.py文件扩展名的情况下为Python代码配置.vimrc?

时间:2013-03-08 23:00:24

标签: python vi

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

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

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

关于缺少后缀 - 我的代码仅适用于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

1 个答案:

答案 0 :(得分:1)

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

修改这些文件:

<强> $ HOME / .vimrc中

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

filetype plugin on
syntax on

<强> $ HOME /的.vim /的scripts.vim

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

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

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

<强> $ HOME /的.vim /文件类型插件/ 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版本和安装位置)。