繁体   English   中英

vim-在.vimrc中设置时python autoindent无法正常工作

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM