Vim: Smart indent при входе в режим вставки на пустой строке?
Когда я открываю новую строку (через 'o'), мой курсор переходит к правильной позиции с отступом на следующей строке. С другой стороны, вход в режим вставки, когда мой курсор находится на пустой строке, не перемещает мой курсор в положение с правильным отступом.
Как сделать vim правильно отступом мой курсор при входе в режим вставки (через i) на пустой строке?
Ответы
Ответ 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, используя этот ярлык, поэтому подумал, что я упоминал об этом.;)