Autoindent в vim всегда очищает строку, если в ней есть только пробел, могу ли я это изменить? - PullRequest
12 голосов
/ 14 мая 2011

Например, я обычно сначала набираю парные скобки, а затем перемещаю курсор внутри блока, что, как я ожидаю, должно выглядеть следующим образом:

....{
....█
....}

Но vim автоматически очищает вторую строку, поскольку в ней есть только пробельные символы, поэтому получаемый результат выглядит так:

....{
█
....}

Как мне это исправить?

(Точки для пробелов, и █ показывает местоположение моего курсора.)

Ответы [ 3 ]

6 голосов
/ 17 мая 2011

Не беспокойтесь о том, что 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).

3 голосов
/ 14 мая 2011

Если вы действительно этого хотите (хотя я согласен с @ThiefMaster), вам нужно просто изменить способ ввода.

Вот 2 решения:

Решение 1: Если вам нравятся клавиши со стрелками

Шаг 1 Курсор "|". Введите {

{|

Шаг 2 Тип возврата

{
    |

Шаг 3 Тип }

{
}|

Шаг 4 Нажмите стрелку вверх

{|
}

Шаг 5 Тип возврата

{
    |
}

Решение 2

Шаг 1 Введите {

{|

Шаг 2 Тип возврата

{
    |

Шаг 3 Тип }

{
}|

Шаг 4 Выход из режима вставки

{
}█

Шаг 5 Тип O

{
    |
}
0 голосов
/ 06 октября 2012

Вот два других решения: http://vim.wikia.com/wiki/Get_the_correct_indent_for_new_lines_despite_blank_lines

Первый может быть полезен. Это просто и эффективно:

:inoremap <CR> <CR>x<BS>

Однако это усложняет использование автозаполнения Vim (). Это также конфликтует с плагинами, которые полагаются на поведение по умолчанию, например, supertab .

Второй, добавление пользовательской функции (см. Ссылку для кода) в ваши плагины или .vimrc кажется ненужным, потому что использование o (как описано @sidyll выше ) или O отступ для вас: {<Return>}<Esc>O

Еще бы создать шаблон сниппета. Таким образом, вы можете {<Tab>, и тогда вам не нужно будет печатать другие нажатия клавиш. Существует различных плагинов для сниппетов . (Извиняюсь, если я рассказываю то, что вы уже знаете.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...