【问题标题】:Vim smart tabs inside an if statementif 语句中的 Vim 智能标签
【发布时间】:2013-04-06 00:12:17
【问题描述】:

我正在使用 Vim 的 SmartTabs 插件将 C 代码与制表符对齐到缩进级别,然后使用空格进行对齐。它非常适合

void fn(int a,
________int b) {
--->...

制表符是--->,空格是_。但对于像

这样的情况,它似乎并不那么好用
--->if(some_variable >
--->--->some_other_variable) {
--->...

在上面的例子中,Vim 在括号内的第二行插入制表符。有没有办法可以修改 Vim 视为延续线的内容以包含这样的情况,所以我得到:

--->if(some_variable >
--->___some_other_variable) {
--->...

【问题讨论】:

  • 我没有答案,但我有一个强烈的意见:帮自己一个忙,永远不要再在源代码中使用制表符。标签已经死了。尤其是在这种情况下,它只会对与您具有相同制表位设置的人看起来不错。
  • @JimStewart 嗯?智能制表符正是解决不同制表位问题的解决方案。这个想法是使用缩进级别的制表符,然后使用空格来对齐文本。每个缩进制表符可以有任意多个空格,但文本对齐需要精确的空格数。

标签: vim indentation


【解决方案1】:

如果有一种缩进样式既可以根据自己的喜好灵活缩进宽度,又可以保持一致的对齐方式,那么您建议的方案就是它。不幸的是,这种风格需要对底层语法有一些基本的了解(例如,some_other_variable 是断行条件的一部分(→ 空格)还是条件中的函数调用(→ 制表符)),这使得实现起来很困难。

我不知道有任何现有的 Vim 插件。 'copyindent''preserveindent' 选项有点帮助,但本质上你必须自己显式插入带有 Space 的非缩进(可能还需要 :set list 来验证)。

我不知道其他编辑器,但大多数其他劣质代码编辑器的情况类似。如果没有良好的自动支持,这种优雅的风格将很难被接受。我很想看到这样的 Vim 插件。

【讨论】:

  • 该插件似乎支持以, 结尾的行。我想知道是否可以将其扩展到以任何运算符结尾的行。甚至可能是在左括号内结束的行。是的,语法知识是必要的,但语法高亮也是如此,我们管理得很好!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-05
  • 2011-12-13
  • 1970-01-01
  • 2020-01-12
  • 1970-01-01
相关资源
最近更新 更多