如何设置 vimrc 配置使其自动缩进 4 个空格而不是制表符?

How to set vimrc configuration so that it automatically indent with 4 spaces instead of a tab?

这是我当前的 .vimrc:

cat ~/.vimrc 
set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936
set termencoding=utf-8
set encoding=utf-8
set tabstop=4
set softtabstop=4
set shiftwidth=4
set noexpandtab
set nu
set autoindent
set cindent
set encoding=utf-8
set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936
set termencoding=utf-8

我正在调试别人的代码,当我插入一个新行时,它似乎自动缩进了下一行。但是,当我执行 python 程序时,它会抱怨。比如我在下面添加了打印语句:

for i, third in enumerate(third_list):
    j = i % 4
    third_group4[j] = third
    print('i, j', i, j)
    if j == 3:
     ....

印刷品似乎与其他线条对齐得很好,但它抱怨:

python test.py 
  File "test.py", line 156
    if j == 3:
    ^
IndentationError: unexpected indent

下一行收到了关于缩进的投诉。我手动查看了一下,发现原来'if'前面的8个前导空格,前4个空格是制表符,也是4个空格长。 1-tab+4 个空格与 8 个空格的长度相同,但这就是它抱怨的原因。

我测试了其他一些打印语句,当我插入打印语句时,它似乎总是影响以下行。

我该如何作废?我不想在我对代码做一点改动时手动修复缩进。我在 Centos 7.

首先,让我们从 vimrc:

中删除多余的行
set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936
set termencoding=utf-8
set encoding=utf-8
set tabstop=4
set softtabstop=4
set shiftwidth=4
set noexpandtab
set nu
set autoindent
set cindent

其次,让我们修复编码部分:

set encoding=utf-8
set fileencodings+=gb18030,gbk,gb2312,cp936
  • :help 'termencoding':help 'encoding' 获取其值,因此如果您希望两个选项具有相同的值,则您只“需要”set encoding=utf-8

    请注意,Vim 从您的环境中获取 'encoding' 的默认值,因此正确设置它可能是个好主意,而不是破解单个程序以按照您想要的方式工作。

  • 如果 'encoding'utf-8,则 :help 'fileencodingd' 的默认值很好,并且已经涵盖了很多内容。添加本地编码比重新定义整个事情更有意义。

并规范化选项名称:

set number

现在我们可以把注意力转移到其他方面了……

  • set cindent 是专门为 C 编写的,因此如果您正在处理 Python 代码,它是无用的,因此可以安全地删除。

  • set noexpandtab 明确告诉 Vim 使用硬制表符。此行有两个问题:

    1. :help 'expandtab' 默认情况下被禁用,因此没有必要手动进行。

    2. 您实际上需要空格,而不是制表符,因此正确的值应该是 set expandtab.

以下是您的 vimrc 在这个阶段应该如何看待:

set encoding=utf-8
set fileencodings+=gb18030,gbk,gb2312,cp936
set tabstop=4
set softtabstop=4
set shiftwidth=4
set expandtab
set autoindent
set number

这似乎并没有影响示例代码的格式。

请注意 Vim 带有内置的文件类型检测机制,除其他外,它为 Python 设置了标准缩进规则。只需将以下行添加到您的 vimrc 即可从中受益:

filetype plugin indent on

参见 :help :filetype