Как сделать так, чтобы в vim autoindent не пропускались конечные пробелы?

2222
Joey Adams

В некоторых текстовых редакторах (например, Kate, gedit), когда включен автоматический отступ, двойное нажатие клавиши возврата оставит завершающий пробел (который я хочу):

if (code) { .... ....| } 

В то время как другие обслуживают стандарт кодирования, где конечные пробелы (даже в пустых строках) не допускаются:

if (code) {  ....| } 

Что меня раздражает в этом, так это то, что если стрелка вверх после авто-отступа, авто-отступ теряется:

if (code) { | .... } 

Если я запускаю vim и :set autoindentя получаю последнее поведение.

У меня вопрос: как мне установить, чтобы vim сохранял завершающие пробелы, а не автоматически удалял их, если они не используются?

7
Моя первоначальная реакция заключается в том, что вы делаете это неправильно. Оставляя пустые строки с таким отступом, вы исключаете возможность использовать `{` или `}` (например, `d {` и т. Д.). hlovdal 13 лет назад 2

3 ответа на вопрос

3
Benjamin Bannier

Посмотрите этот совет в vimвики о том, как сделать правильный отступ даже для пустых строк. Если вы просто хотите сохранить предыдущий отступ (игнорируя то, что vimрассчитывается как правильный отступ), используйте let ind = indent(prevnonblank(v:lnum - 1))как описано в комментарии к той же записи вики.

1
Xiong Chiamiov

Я нашел это решение для меня:

:inoremap <Return> <Space><BS><Return> 
Это похоже на хак / обходной путь. Разве нет подходящей опции, чтобы отключить это поведение «незаполненной пустой строки»? Doub 12 лет назад 1
Не то, чтобы я знал - иначе я бы разместил это здесь. Xiong Chiamiov 11 лет назад 0
0
Tom Hale

In my .vimrc:

" Change a blank line upon creation so that its leading spaces won't be removed inoremap <Return> <Return><Space><BS> nnoremap o o<Space><BS> nnoremap O O<Space><BS>