Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vim缩进和对齐:组合空格和制表符_Vim_Editor_Tabs_Whitespace_Indentation - Fatal编程技术网

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

Vim缩进和对齐:组合空格和制表符,vim,editor,tabs,whitespace,indentation,Vim,Editor,Tabs,Whitespace,Indentation,我正在尝试解决如何让Vim遵循比大多数编辑器默认允许的缩进方案稍微复杂一些的缩进方案。基本上,我希望使用制表符进行缩进,但使用空格对齐跨越多行的语句。例如: private static $_columns = array('id' => 'id', 'email' => 'email', 'passwordHash' =>

我正在尝试解决如何让Vim遵循比大多数编辑器默认允许的缩进方案稍微复杂一些的缩进方案。基本上,我希望使用制表符进行缩进,但使用空格对齐跨越多行的语句。例如:

    private static $_columns = array('id' => 'id',
                                     'email' => 'email',
                                     'passwordHash' => 'password_hash',
                                     'salt' => 'salt');
    ^ tabs up to here
                                     ^ spaces up to here
这里的想法是缩进遵循编辑文件的人的制表符宽度首选项,而多行语句仍然正确对齐


我想实现这一点的简单方法是让Vim在输入新行时只复制上一行(即前导空白)上使用的缩进模式。在Vim中有什么方法可以做到这一点吗?我需要写一个插件吗?

有一个wikia条目专门用于该主题:


建议的解决方案是使用一个插件:“

这似乎正是我想要的,但似乎不起作用。我已经把它放在我的
bundle
目录中,但是如果我把上面发布的代码片段添加一行,它只会像平常一样使用制表符,并用空格填充它们。我是不是遗漏了什么?@Will Vousden:我自己不使用那个插件,所以我不能对它发表评论。你所期待的功能缺失了?我想我一开始遇到的问题是由另一个插件引起的,但它看起来仍然有点不稳定。例如,如果在示例中的第二行末尾以插入模式按enter键,对齐空间将替换为单个选项卡,新行也将缩进单个选项卡。对于新行使用
o
o
时,它似乎偶尔起作用,但对于
cc
则不起作用。我猜原因是它只是使用映射来模拟不同的自动缩进行为,这是一个不太完美的实现?理想情况下,在触发自动缩进的任何情况下,它都应该在较低的级别上工作,并实际替换默认的自动缩进,而不是仅仅纠正它,但也许这是不可能的?@sidyll:不太整洁,需要更多的努力!不过,我以前从未玩过modelines,所以我会去尝试一下——谢谢!我同意。我只是建议这样做,因为在某些情况下,当您知道接收器将在Vim中读取文件时,一个简单的
Vim:ts=4
可以很好地工作。