【问题标题】:Auto-indent spaces with C in vim?在vim中使用C自动缩进空格?
【发布时间】:2010-09-10 23:50:47
【问题描述】:

我在使用 Eclipse 和 java 时有点被宠坏了。我开始在 linux 环境中使用 vim 进行 C 编码,有没有办法让 vim 自动为块做适当的间距?

所以在输入 { 后,下一行将缩进 2 个空格,并且该行的 return 将保持相同的缩进,而 } 将移回 2 个空格?

【问题讨论】:

    标签: c vim coding-style vi


    【解决方案1】:

    试试:

    设置 sw=2

    设置 ts=2

    设置智能缩进

    【讨论】:

    • 根据帮助,cindent 比 smartindent 好,但只适用于类 C 代码。
    • smartindent 已被弃用(也仅适用于类 C 代码)。文件类型缩进脚本要好得多。
    • @graywh 除了维基,哪个权威来源声明了 smartindent 的弃用状态?
    【解决方案2】:

    这两个命令应该可以做到:

    :set autoindent
    :set cindent
    

    为了获得奖励积分,请将它们放在一个名为 .vimrc 的文件中,该文件位于您的 linux 主目录中

    【讨论】:

    • 我还建议将它们放入 ~.vim/ftplugin/c.vim 中,这样您就不会一直使用 cindent,而只是用于 C/C++ 文件。
    • @graywh:对于 pl、php、cpp、as、java 以及我想要具有相同缩进的所有其他文件呢?我需要为每个单独的设置文件创建一个单独的设置文件吗?
    • 我依赖 Vim 捆绑的缩进脚本 (:filetype indent on),它比总是使用 'cindent' 要好得多
    • 为什么文件类型缩进比使用 cindent 更好,这里有很好的解释:vim.wikia.com/wiki/…
    • 对于自动缩进,您可能需要使用简写:set ai
    【解决方案3】:

    wrote all about tabs in vim,它提供了一些你没有问过的有趣的事情。要自动缩进大括号,请使用:

    :set cindent
    

    缩进两个空格(而不是一个制表符,八个空格,vim 默认):

    :set shiftwidth=2
    

    要防止 vim 将八个空格转换为制表符:

    :set expandtab
    

    如果您想更改文本块的缩进,请使用 。我通常将此与块选择模式结合使用(v,选择文本块,)。

    (我会尝试劝说您不要使用两个空格缩进,因为我(和大多数其他人)发现它很难阅读,但这是另一个讨论。)

    【讨论】:

    • 非常好的博客。我对 vim 还是很陌生,很高兴知道那里有很好的资源。
    • 除了 shiftwidth 之外,您还错过了更改 softtabstop。
    【解决方案4】:

    并永远记住这个关于空格 + 制表符的古老解释:

    http://www.jwz.org/doc/tabs-vs-spaces.html

    【讨论】:

    • 那家伙的论点是怎么回事?我不知道如何不使用 TAB 字符,而是使用硬编码空格来解决每个人的问题。例如,这将导致无法打开文件并根据自己的喜好显示其缩进的宽度。
    • 这家伙的解决方案好多了:) blogs.msdn.com/cyrusn/archive/2004/09/14/229474.aspx
    【解决方案5】:

    很多 vim 的功能(比如autoindentcindent)默认是关闭的。要真正了解 vim 能为您做什么,您需要一个像样的~/.vimrc

    一个好的入门者是$VIMRUNTIME/vimrc_example.vim。如果您想尝试一下,请使用

    :source $VIMRUNTIME/vimrc_example.vim
    

    在 vim 中时。

    我实际上建议将内容复制到您的~/.vimrc,因为它的评论很好,并且是开始学习如何使用 vim 的好地方。你可以这样做

    :e $VIMRUNTIME/vimrc_example.vim
    :w! ~/.vimrc
    

    这将覆盖您当前的~/.vimrc,但如果您拥有的所有内容都是 Davr 建议的缩进设置,我不会担心,因为 vimrc 示例也会为您处理这些。有关该示例的完整演练以及它对您的作用,请参阅:help vimrc-intro

    【讨论】:

      【解决方案6】:

      简单运行:

      user@host:~ $ echo set autoindent >> .vimrc
      

      【讨论】:

      • 我不是投反对票的人,但这可能是因为简单地“设置自动缩进”不会在输入“{”和“}”时自动缩进,也不会自动将间距设置为 2 个空格。这是他们要求的。
      【解决方案7】:

      我认为最好的答案其实是在 vim wikia 上解释的:

      http://vim.wikia.com/wiki/Indenting_source_code

      请注意,它建议不要使用“set autoindent”。我在这个解释中发现的所有最好的特性是能够设置每个文件的设置,例如,如果你用 python 和 C++ 编程,这特别有用,因为你需要 4 个空格用于前者的制表符,2 个用于后者中的空格。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多