Vim:使用制表符进行缩进,使用空格与C源文件对齐

时间:2011-12-13 17:45:35

标签: vim alignment indentation auto-indent

是否有人使用硬标签作为缩进字符进行vim设置,但确实使用空格进行对齐?我遇到的问题是,在

中启动延续行时
if (condition1 && (anotherlongcondition || /* <-- Here I insert a newline */
|-------|-------   whatever  /* some additional alignment added automatically */

,然后cin(这对我来说是必须的)按照我喜欢位置的方式添加一些对齐方式,但是使用尽可能多的硬标签创建此对齐并填充用空格休息(因为我试图想象)。

因此,简而言之,cin似乎并不能区分缩进对齐。我真的很喜欢上面例子中所有添加的对齐方式都是空格。这样,在临时切换ts时,将正确保留对齐。

为了再次说清楚,我希望能够编写以下代码,从不在任何行中的第一个非空白字符前面按<TAB><SPACE>(而不是做任何手动换档或其他):

void foo(int bar)
{
|-------somestatement;
|-------if (somecondition && (someothercondition ||
|-------                      whatevercomesnext))
|-------|-------dosomething;
}

我已经尝试了ctab.vim,但它专注于编辑带有软标签的对齐线,这对我来说似乎很愚蠢,因为手动对齐是一项提供一步细化的任务而不是tab-width-step细化。我没有改变cin使用混合制表符和空格进行对齐的方式。

我还没有找到任何内置的方法来实现这一目标。也许还有一个?无论如何,我怀疑有一个插件可以做到这一点。虽然我承认我自己没有vim脚本并且可能没有足够的经验,但我必须说我试过的大多数插件都搞砸了我的编辑器配置......

2 个答案:

答案 0 :(得分:3)

除了你的:set cino =(1,你可能也对'preserveindent'和'copyindent'选项感兴趣,如果你还没有遇到它们。它们并没有完全解决你的问题,但他们做的走一些帮助。

答案 1 :(得分:1)

好的,抱歉这个问题。我终于找到了一些好材料。

http://vim.1045645.n5.nabble.com/Indent-with-tabs-align-with-spaces-td1183279.html

总而言之,目前vim不够灵活,无法轻松完成。

我的解决方法当前正在使用:set cinoptions=(1,它在启动延续行时只添加一个对齐单元。这样,我可以确定添加的对齐是一个空格(只要我没有:set ts=1,至少)并手动添加大量的空格。这在速度方面仍然可以,对我来说似乎是最不引人注意的行为!