[英]vim - python autoindent not working correctly when set in .vimrc
我的.vimrc
文件有问题:我正确地编写python代码。 但是我有缩进问题。 当我放在.vimrc文件中时:
" indentation python
au BufNewFile,BufRead *.py
\ set tabstop=4
\ set softtabstop=4
\ set shiftwidth=4
\ set textwidth=79
\ set expandtab
\ set ts=4
\ set sw=4
\ set ai
\ set autoindent
\ set fileformat=unix
\ set expandtab ts=4 sw=4 ai
但是,一旦打开python文件,如果我运行set expandtab ts=4 sw=4 ai
vim,将在选择代码并按S-=
时正确地开始缩进。 任何想法?
这在Vim中不是有效的语法。 \\
仅取消换行符,它不允许您链接命令(为此具有|
)。 您编写的内容等同于(截断为选项的一部分):
au BufNewFile,BufRead *.py set tabstop=4 set softtabstop=4 set shiftwidth=4 set textwidth=79
这显然没有意义,因为set
不是一个有效的选项。
所以你可以做
au BufNewFile,BufRead *.py
\ set tabstop=4
\ softtabstop=4
\ shiftwidth=4
\ textwidth=79
(使其成为具有多个设置的单个set
命令),或者您可以执行
au BufNewFile,BufRead *.py
\ set tabstop=4 |
\ set softtabstop=4 |
\ set shiftwidth=4 |
\ set textwidth=79
(使其成为多个set
命令)。
但是,这是一个坏习惯,因为这些选项将在全局范围内设置。 例如,如果您加载一个JavaScript文件,然后加载一个Python文件,然后返回您的JavaScript缓冲区,它将具有您的Python设置。 您应该更喜欢使用setlocal
。
另外,通常使用FileType python
代替BufNewFile,BufRead *.py
是有意义的-在Python的情况下可能不专门,但是某些语言可以具有多种扩展名。
最后,这允许您通过将与语言相关的设置放在.vim/after/ftplugin/python.py
来清理.vimrc
。 您在那里不需要autocmd
只需编写setlocal
,并确保您的设置将针对每个python
文件类型的缓冲区执行,所以请放心。
因此,我的最终建议是:
" .vim/after/ftplugin/python.py
setlocal tabstop=4
setlocal softtabstop=4
setlocal shiftwidth=4
setlocal textwidth=79
setlocal expandtab
setlocal autoindent
setlocal fileformat=unix
或同等
" .vim/after/ftplugin/python.py
setlocal ts=4 sts=4 sw=4 tw=79 et ai ff=unix
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.