Autoindent in vim всегда пуст строку, если в ней есть только пробелы, могу ли я это изменить?
Например, я обычно набираю парные фигурные скобки сначала, а затем перемещаю курсор внутри блока, что я ожидаю, должен выглядеть следующим образом:
....{
....█
....}
Но vim автоматически удаляет вторую строку, поскольку в ней есть только пробельные символы, поэтому результат выходит следующим образом:
....{
█
....}
Как это исправить?
(Точки для пробелов, а █ - расположение моего курсора.)
Ответы
Ответ 1
Не беспокойтесь о том, что Vim прокладывает пробелы из пустой строки, когда вы покидаете режим вставки. Как прокомментировали другие, это хорошо. Вместо этого найдите способ автоматического восстановления уровня отступов при вызове режима вставки в этой строке.
Команды i
, i
, a
и a
сохраняют позицию курсора при вставке в режим вставки. Но проверьте документацию :help cc
:
["x]cc Delete [count] lines [into register x] and start
insert linewise. If 'autoindent' is on, preserve
the indent of the first line.
Если параметр autoindent
включен, то запуск cc
в пустой строке переключится в режим вставки и восстановит соответствующий уровень отступов, настроив его так, как вы хотите:
....{
|
....}
Обратите внимание, что клавиша S
является синонимом cc
(:help S
).
Ответ 2
Если вы действительно этого хотите (хотя я согласен с @ThiefMaster), это просто вопрос изменения способа его ввода.
Вот два решения:
Решение 1. Если вам нравятся клавиши со стрелками
Шаг 1
Курсор - "|". Введите {
{|
Шаг 2
Тип Возврат
{
|
Шаг 3
Тип }
{
}|
Шаг 4
Нажмите стрелку вверх
{|
}
Шаг 5
Тип Возврат
{
|
}
Решение 2
Шаг 1
Введите {
{|
Шаг 2
Тип Возврат
{
|
Шаг 3
Тип }
{
}|
Шаг 4
Выход из режима вставки
{
}█
Шаг 5
Тип O
{
|
}
Ответ 3
Вот два других решения: http://vim.wikia.com/wiki/Get_the_correct_indent_for_new_lines_despite_blank_lines
Первый может быть полезен. Это просто и эффективно:
:inoremap <CR> <CR>x<BS>
Однако это делает использование Vim auto-complete (< C-n > ) более сложным в использовании. Он также сталкивается с плагинами, которые полагаются на поведение по умолчанию, например. supertab.
Второй, добавив пользовательскую функцию (см. ссылку для кода) к вашим плагинам или .vimrc, кажется ненужным, поскольку использование o
(как описано @sidyll выше) или o
делает отступ для вас: {<Return>}<Esc>O
Другим было бы создание шаблона фрагмента. Таким образом, вы могли бы {<Tab>
, а затем вам не придется вводить другие нажатия клавиш. Есть различные плагины отрывков. (Извиняюсь, если я рассказываю то, что вы уже знаете.)