【问题标题】:Why does indentation done in vim look different in different editors?为什么在 vim 中完成的缩进在不同的编辑器中看起来不同?
【发布时间】:2016-03-21 12:55:24
【问题描述】:

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


(来源:take.ms

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


(来源:take.ms

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

源树:


(来源:take.ms

崇高文本:

谁能向我解释为什么会发生这种情况以及我该如何解决?我也很好奇,哪个才是文件状态的“真实”表示。

【问题讨论】:

  • 一个使用制表符,另一个使用软制表符(空格)。
  • 那么解决方案是什么?

标签: vim indentation


【解决方案1】:

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

  • tabstop 设置制表符的大小。
  • softtabstop 设置按下<Tab> 键时插入的空格数。
  • shiftwidth 设置使用自动缩进时插入的空格数(例如,在键入 if (foo) {<Cr> 之后)。

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

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

额外提示

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

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

【讨论】:

    【解决方案2】:

    解决方案(感谢@ceejayoz)是在我的.vimrc 设置中设置expandtab 选项,因此:

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

    完成了任务。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-06
      • 2018-05-30
      • 2017-07-03
      • 2020-07-12
      • 1970-01-01
      相关资源
      最近更新 更多