2013-09-11 5 views
1

У меня есть код C, с , указывающий на символ, где находится курсор Vim, и · с указанием ведущего пространства.Vim 'expandtab' листья ведущие пробелы

int main() 
{⇦ 
····return 0; 
} 

я в настоящее время 'expandtab' включен, и я нажимаю 'O', что дает:

int main() 
{ 
····⇦ 
····return 0; 
} 

Я нажмите 'Enter' ключ один раз, и теперь у меня есть:

int main() 
{ 
···· 
····⇦ 
····return 0; 
} 

I нажмите '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)


Обновление: больше информации


Я могу воспроизвести это с довольно 'ванилью' набором настроек, например, путем вызова Vim с : vim -u /etc/vimrc foo.c, а затем в сеансе set expandtab и set cindent. Я также попробовал «установить autoindent», который, похоже, не помогает в этом конкретном случае.

Параметры ci, si и ai отключены.

Я работаю на CentOS 6.4, для справки.

Благодаря

+0

Такое поведение может быть очень плагин зависит. Я не смог воспроизвести вашу проблему с установкой Fedora и Gentoo Vim. –

+0

@matthiaskrull Какие версии Vim были такими? – jwd

+0

pls сообщают о выходе этих команд: 'set ci?' 'Set si?' И 'set ai?' – Kent

ответ

0

Ну, это оказался хитрый плагин, вызывающий проблему.

Раньше я не пробовал с --noplugins (не знал об этом варианте).

У меня был плагин 'ctab.vim', действующий все это время. Отключение этого исправляет проблему.

Кроме того, есть исправления ошибок для этого вопроса, предоставленной Константин Lepa на этом сайте: http://vim.wikia.com/wiki/Script:231

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}. 

отмечают, что

Если вы не типа ничего на новой линии, за исключением < BS> или CTRL-D, а затем typ e < Esc>, CTRL-O или < CR>, отступ удаляется снова.

+0

Увы, это не так Орк для меня. Суть для меня в том, что он ведет себя одним способом с 'expandtab', а другой с ним. Кажется, что Autoindent не изменил ни один случай. – jwd

+0

@jwd, вы сказали в своем комментарии, 'cindent' был включен, правильно? так что в основном, вы тестировали с 'cin' и' ai' on, это не сработало? – Kent

+0

Да, правильно. Я запускаю 'vim -u/etc/vimrc foo.c', затем используйте' set cindent expandtab' (с или без 'autoindent'), введите файл, как указано выше, и выполните описанные шаги, и у меня есть строка с дополнительными пробелами. Легко видеть с 'set list' – jwd

Смежные вопросы