为什么vim中的缩进在不同的编辑器中看起来有所不同?

时间:2016-03-21 12:55:24

标签: vim indentation

我刚用vim来编辑javascript文件。我在vim中的缩进设置如下:

http://take.ms/XPgNb

当我编辑文件的一部分时,在vim中看起来好像缩进是正确的:

http://take.ms/hp7kh

但是,在SourceTree和Sublime Text中,缩进不正确:

SourceTree:

http://take.ms/ByRLS

Sublime Text:

http://take.ms/HaiwY

任何人都可以向我解释为什么会发生这种情况以及如何解决这个问题?我也很好奇,真的," true"表示文件的状态。

2 个答案:

答案 0 :(得分:6)

有三种相关设置:tabstopsofttabstopshiftwidth。它们相同。

  • tabstop设置标签字符的大小。
  • softtabstop设置按下<Tab>键时插入的空格数。
  • shiftwidth设置使用自动注册时插入的空格数(例如,在键入if (foo) {<Cr>后)。

如果未设置expandtab,则只要空格数为0x09,空格就会自动替换为制表符(tabstop)。如果设置了expandtab,则空格永远不会“扩展”为制表符。

在您的情况下,您只设置shiftwidth,它不控制制表符的实际大小。您要么将tabstop设置为与Sublime文本相同的值,要么通过设置expandtab来使用空格缩进。如果您使用set list,则可以查看您的文件是否使用制表符或空格(使用set nolist禁用此选项。)

奖金提示

在我个人看来,您通常希望将所有三个设置都设置为相同的值。我使用此命令快速设置所有三个:TS 4

command! -nargs=1 TS setlocal ts=<args> sts=<args> sw=<args>

答案 1 :(得分:0)

解决方案(感谢@ceejayoz)是在expandtab设置中设置.vimrc选项,所以:

autocmd FileType javascript setlocal shiftwidth=2 tabstop=2 expandtab
autocmd FileType jsx setlocal shiftwidth=2 tabstop=2 expandtab

完成了这项工作。