我有一些C代码,⇦
指向Vim光标所在的字符,·
指示前导空格。
int main()
{⇦
····return 0;
}
我目前已打开'expandtab',然后按'O',产生:
int main()
{
····⇦
····return 0;
}
我按下'Enter'键一次,现在我有:
int main()
{
····
····⇦
····return 0;
}
我再次按下'Enter'键,然后写一些文字,给出:
int main()
{
····
····// bla bla bla⇦
····return 0;
}
如何让Vim不在{
之后的第一行添加前导缩进?
它足够聪明,可以删除后续空行的前导空格。
如果我使用gg=G
重新加载文件,则会删除该额外空格。但根据我的理解,它不应该首先出现在那里。
另外,如果我没有打开'expandtabs',一切正常。 换句话说,如果我使用'noexpandtabs'执行与上面相同的操作,则不会留下额外的缩进。
有什么地方可以解决这个问题吗? 这是一个错误吗?
我的版本是:VIM - Vi IMproved 7.2 (2008 Aug 9, compiled Apr 5 2012 10:17:30)
更新:更多信息
我可以使用相当''vanilla'的设置重现这一点,例如通过调用Vim:vim -u /etc/vimrc foo.c
,然后在运行set expandtab
和set cindent
的会话中。我也试过'set autoindent',这似乎对这种特殊情况没有帮助。
ci
,si
和ai
设置均已停用。
我在CentOS 6.4上运行,仅供参考。
由于
答案 0 :(得分:1)
您需要set ai
来自帮助:
'autoindent' 'ai' boolean (default off)
local to buffer
Copy indent from current line when starting a new line (typing <CR>
in Insert mode or when using the "o" or "O" command). If you do not
type anything on the new line except <BS> or CTRL-D and then type
<Esc>, CTRL-O or <CR>, the indent is deleted again. Moving the cursor
to another line has the same effect, unless the 'I' flag is included
in 'cpoptions'.
When autoindent is on, formatting (with the "gq" command or when you
reach 'textwidth' in Insert mode) uses the indentation of the first
line.
When 'smartindent' or 'cindent' is on the indent is changed in
a different way.
The 'autoindent' option is reset when the 'paste' option is set.
{small difference from Vi: After the indent is deleted when typing
<Esc> or <CR>, the cursor position when moving up or down is after the
deleted indent; Vi puts the cursor somewhere in the deleted indent}.
请注意
如果你不这样做 在新行上输入任何内容,除了&lt; BS&gt;或CTRL-D然后键入 &lt; Esc&gt;,CTRL-O或&lt; CR&gt;,再次删除缩进。
答案 1 :(得分:0)
嗯,原来这是一个狡猾的插件导致了这个问题。
我之前应该尝试--noplugins
(不知道该选项)。
我一直有'ctab.vim'插件生效。禁用它可以解决问题。
此外,Konstantin Lepa在此网站上提供了此问题的错误修正:http://vim.wikia.com/wiki/Script:231