我以前在Vim中使用8个空格作为制表符。然后我改成了4个空格,但现在每当我添加一行代码到之前使用8个空格的代码中时,尽管一切都对齐得很好,它仍会给出缩进不匹配的错误。有没有什么方法可以避免这个问题?
你尝试过执行 :%retab
命令吗?
你只更改了tabstop选项吗?
我使用4个空格(按下tab键时填充空格,要插入实际的制表符,请按下ctrl-v tab
)。这是我的.vimrc文件中与tab有关的设置:
" tabs
set tabstop=4
set shiftwidth=4
set expandtab
如果你用空格填充制表位,你总是会插入空格,这样你的代码看起来始终如一。
当你使用制表位时,每个工具都会以不同方式显示制表位,你最终会花费时间设置应该为制表位显示多少个空格(8、4、3.5),而不是进行有意义的工作。
或从vim 7.1帮助tabstop中选择以下选项之一:
Note: Setting 'tabstop' to any other value than 8 can make your file
appear wrong in many places (e.g., when printing it).
There are four main ways to use tabs in Vim:
1. Always keep 'tabstop' at 8, set 'softtabstop' and 'shiftwidth' to 4
(or 3 or whatever you prefer) and use 'noexpandtab'. Then Vim
will use a mix of tabs and spaces, but typing <Tab> and <BS> will
behave like a tab appears every 4 (or 3) characters.
2. Set 'tabstop' and 'shiftwidth' to whatever you prefer and use
'expandtab'. This way you will always insert spaces. The
formatting will never be messed up when 'tabstop' is changed.
3. Set 'tabstop' and 'shiftwidth' to whatever you prefer and use a
|modeline| to set these values when editing the file again. Only
works when using Vim to edit the file.
4. Always set 'tabstop' and 'shiftwidth' to the same value, and
'noexpandtab'. This should then work (for initial indents only)
for any tabstop setting that people use. It might be nice to have
tabs after the first non-blank inserted as spaces if you do this
though. Otherwise aligned comments will be wrong when 'tabstop' is
changed.
对于Python代码,您最好使用以下内容:
:set tabstop=8
:set shiftwidth=4
:set expandtab
:set tabstop=4
:retab
:set tabstop=8
这将使用每个制表符4个空格重新缩进所有内容,并将您恢复到合理的默认设置。
显然,这是有争议的,但在我的看法中,使用除了cat文件时得到的制表符之外的任何其他制表符都会带来麻烦。
最好的可视化不匹配的方法是使用 :set list 命令,它会显示空格问题。
set listchars=tab:>-,trail:-,nbsp:+ "This is terminal friendly but you can make fancy
set list
nnoremap <leader>wd :%s/\s\+$//<cr>