我的.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
Run Code Online (Sandbox Code Playgroud)
但只要一个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
Run Code Online (Sandbox Code Playgroud)
这显然没有意义,因为set这不是一个有效的选择。
所以你可以这样做
au BufNewFile,BufRead *.py
\ set tabstop=4
\ softtabstop=4
\ shiftwidth=4
\ textwidth=79
Run Code Online (Sandbox Code Playgroud)
(使其成为set具有多个设置的单个命令),或者您可以这样做
au BufNewFile,BufRead *.py
\ set tabstop=4 |
\ set softtabstop=4 |
\ set shiftwidth=4 |
\ set textwidth=79
Run Code Online (Sandbox Code Playgroud)
(使其成为多个set命令)。
但是,这是不好的做法,因为选项将全局设置;例如,如果您先加载一个 JavaScript 文件,然后再加载一个 Python 文件,然后返回到您的 JavaScript 缓冲区,它将拥有您的 Python 设置。你应该更喜欢使用setlocal。
此外,通常使用FileType python而不是BufNewFile,BufRead *.py- 可能不是专门针对 Python 的情况,但某些语言可以有多个扩展名。
最后,这允许您.vimrc通过将依赖于语言的设置放在.vim/after/ftplugin/python.py. 您不需要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
Run Code Online (Sandbox Code Playgroud)
或等效地
" .vim/after/ftplugin/python.py
setlocal ts=4 sts=4 sw=4 tw=79 et ai ff=unix
Run Code Online (Sandbox Code Playgroud)