Vim: Умный отступ при переходе в режим вставки в пустой строке? - PullRequest
38 голосов
/ 09 июня 2010

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

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

Ответы [ 3 ]

71 голосов
/ 11 июня 2010

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

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

14 голосов
/ 09 июня 2010

Ну, на самом деле все было не так плохо, как я думал. Один из способов сделать это - добавить следующее в ~ / .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 убедится, что ваш регистр не уничтожен

7 голосов
/ 27 января 2012

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

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

...