如何为没有.py文件扩展名的Python代码配置.vimrc?
因此,我对Python的.vimrc配置非常满意-除了我开始为脚本去掉.py后缀,现在vim不知道我正在编辑的文件是Python文件 澄清:我已经确认vim知道我正在使用 :echo和文件类型 它报告“python” 因此,真正的问题是,当我目前为此目的使用文件扩展名时,如何分配特定于python的行为(见下文)。可以用文件类型驱动吗?两者都需要吗 关于缺少后缀的问题,我的代码只针对unix主机,这在unix主机上很常见,我喜欢隐藏实现细节,以便以后可以假设更改实现 以下是我的.vimrc的一小部分:如何为没有.py文件扩展名的Python代码配置.vimrc?,python,vi,Python,Vi,因此,我对Python的.vimrc配置非常满意-除了我开始为脚本去掉.py后缀,现在vim不知道我正在编辑的文件是Python文件 澄清:我已经确认vim知道我正在使用 :echo和文件类型 它报告“python” 因此,真正的问题是,当我目前为此目的使用文件扩展名时,如何分配特定于python的行为(见下文)。可以用文件类型驱动吗?两者都需要吗 关于缺少后缀的问题,我的代码只针对unix主机,这在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的设置的关键是启用并(可选地)教会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版本和安装位置,您的路径可能会有所不同)。为不带任何扩展名的文件启用python特定设置的关键是启用并(可选)向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$''或类似的.BTW,对于选项#1,Vim的文件类型检测实现位于/usr/share/Vim下的“scripts.Vim”中(路径可能不同)。我的Vim安装通过匹配文件的第一行来检测文件语言,因此实际上这是我们讨论的选项2。谢谢-它没有解决当前的问题,但看起来很有趣。没问题。我已经用其他选项扩展了我的答案-希望这些选项对我有所帮助。谢谢-看起来我需要选项1。您能否在.vimrc文件中显示它的外观。我想我必须打开该检测,然后使用文件类型和文件扩展名(?)设置各种功能,我很惊讶它在默认情况下对您不起作用。你的Vim版本是什么?它是用python支持编译的吗?(见:版本)。如果所有其他方法都失败了,您可以始终将选项#2与“If getline(1)=~”一起使用/usr/bin/python$''或类似的.BTW,对于选项#1,Vim的文件类型检测实现位于/usr/share/Vim下的“scripts.Vim”中(路径可能不同)。我的Vim安装通过匹配文件的第一行来检测文件语言,所以实际上这是我们讨论过的选项2。