Подтвердить что ты не робот

Vim: Smart indent при входе в режим вставки на пустой строке?

Когда я открываю новую строку (через 'o'), мой курсор переходит к правильной позиции с отступом на следующей строке. С другой стороны, вход в режим вставки, когда мой курсор находится на пустой строке, не перемещает мой курсор в положение с правильным отступом.

Как сделать vim правильно отступом мой курсор при входе в режим вставки (через i) на пустой строке?

4b9b3361

Ответ 1

cc заменит содержимое текущей строки и введет режим вставки с правильным отступом - так что пустая строка сделает то, что вы после.

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

Ответ 2

Хорошо, это было не так плохо, как я думал. Один из способов включить это - добавить следующее к вашему ~/.vimrc

"smart indent when entering insert mode with i on empty lines
function! IndentWithI()
    if len(getline('.')) == 0
        return "\"_ccO"
    else
        return "i"
    endif
endfunction
nnoremap <expr> i IndentWithI()

Он просто проверяет пустую строку, когда вы нажимаете "i" из режима вставки. Если вы действительно на пустой строке, он удалит его и откроет новый, эффективно используя действующее поведение открытой строки.

Примечание: "_ до того, как cc гарантирует, что ваш реестр не будет протерн.

Ответ 3

На пустой строке, чтобы правильно ввести оттиск вставки, вы можете просто использовать s.

Обратите внимание, что s является синонимом cl, поэтому, если вы на самом деле не на пустой строке, это приведет к удалению одного символа, а не отступов. В этом случае вам лучше использовать cc, поскольку sml предложил около 18 месяцев назад. Но я часто улучшал свой счет в VimGolf, используя этот ярлык, поэтому подумал, что я упоминал об этом.;)