Vim缩进和对齐:结合空格和制表符

3

我正在尝试解决一个问题,即如何使Vim遵循比大多数编辑器默认情况下更复杂的缩进方案。基本上,我想使用制表符进行缩进,但是对于跨越多行的语句,我想使用空格进行对齐。例如:

    private static $_columns = array('id' => 'id',
                                     'email' => 'email',
                                     'passwordHash' => 'password_hash',
                                     'salt' => 'salt');
    ^ tabs up to here
                                     ^ spaces up to here

这里的想法是缩进遵循编辑文件的人的tab-width偏好,而多行语句仍然对齐正确。
我猜实现这个想法的简单方法就是让Vim在输入新行时,复制前一行使用的缩进模式(即首个空白字符)。在Vim中有没有实现它的方法?还是需要编写插件?

@sidyll:不太整洁,需要更多的努力!不过,我以前从未尝试过模型行,所以我会去尝试一下 - 谢谢! - Will Vousden
我同意。我只是建议,在某些情况下,当您知道接收者将在Vim中阅读文件时,简单的vim:ts = 4效果很好。 - sidyll
1个回答

6

1
这似乎正是我想要的东西,但它似乎不起作用。我已经将它放在我的Pathogen“bundle”目录中,但如果我使用上面发布的片段并添加一行,它只是像往常一样使用制表符,并用空格填充它们。我错过了什么吗? - Will Vousden
@Will Vousden:我自己不使用那个插件,所以我无法对它发表评论。你期望的功能是什么? - Xavier T.
我认为我一开始遇到的问题是由另一个插件引起的,但它仍然似乎有点不稳定。例如,如果我在示例中的第二行末尾处于插入模式下按Enter键,则对齐空格将被替换为单个制表符,并且新行也将缩进一个制表符。当使用oO进行换行时,它似乎是间歇性工作的,但对于cc则不是。我想原因是它只是使用映射来模拟不同的自动缩进行为,这是一种不太完美的实现? - Will Vousden
理想情况下,它应该在任何触发自动缩进的情况下在较低级别上工作,并实际替换默认的自动缩进,而不仅仅是纠正它,但也许这是不可能的? - Will Vousden

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接