Как сохранить отступ после нажатия Esc в Vim
Я set autoindent
Я иду к линии, нажимаю A и <CR>
что приводит меня к следующей строке и вставляет отступ. Однако, если я нажму Esc, курсор перейдет к началу строки, и отступ исчезнет.
Я должен идти и нажимать вкладки, чтобы снова попасть в нужное место.
Я знаю, что помочь говорит:
If you do not type anything on the new line except <BS> or CTRL-D and then type
<Esc>, CTRL-O or <CR>, the indent is deleted again.
есть ли способ отключить это, или по крайней мере обходной путь?
7 ответов
у меня была эта точная проблема до двух дней назад.
здесь нет способ отключить это, но, к счастью, вам не нужно, потому что вместо этого:
введите режим вставки с S
или cc
. Вход в режим вставки снова с S
войдет в режим вставки с соответствующим уровнем отступа, что делает тот факт, что Vim удалил отступы неважными.
Примечание: я обнаружил, что этот трюк работает для меня в большинстве мест. Но по какой-то причине это произошло не работа с файлами Python. Я предполагаю, что это связано с типом файла Python, который возится со своими собственными функциями отступов или что-то в этом роде.
Edit:
другой трюк, вы можете определить cpoptions таким образом, что, если вы находитесь на линии с отступом и переместить курсор, он сохранит отступ. Это не решите свою проблему удара Esc
сразу, но это связанный вопрос, который также может беспокоить вас.
хорошо, я понял это.
основываясь на ответе Эдана Маора,S или cc должен войти в режим вставки с соответствующим уровнем отступа.
...за исключением случаев, когда это не так:)
это работает при двух обстоятельствах.
- , когда
cindent
установлен, он будет вставлять отступ на основе правил форматирования C
Это может оказаться раздражающим при редактировании не C-подобных файлов. - , когда
indentexpr
is набор.
я обнаружил, что лучшим решением является то, что это мой .vimrc
set autoindent
set indentexpr=GetIndent()
function GetIndent()
let lnum = prevnonblank(v:lnum - 1)
let ind = indent(lnum)
return ind
endfunction
теперь, когда я нажимаю S или cc, он вставит тот же отступ, что и в предыдущей незаполненной строке.
рассмотрим, что я использую 'o' для запуска новой строки. Я добавляю ниже config в _vimrc (обратите внимание, что у меня есть ':set autoindent')
" ugly hack to start newline and keep indent
nnoremap o ox<BS>
nnoremap O Ox<BS>
простой способ-нажать '.'(или любой символ), escape, затем нажмите x, чтобы удалить символ. Отступ должен быть сохранен.
возможно, стоит отметить, что с правильными плагинами S
и cc
Кажется, снова работает корректно. Скорее всего, это python-mode, который исправляет это.
Я хотел бы достичь того же эффекта, но потому, что я хочу плагин показывает отступ для правильной работы. Это мой обходной путь: я нашел, что <enter>
в обычном режиме практически бесполезно. Он перемещает курсор только на одну строку вниз, что может быть достигнуто с помощью j
.
поэтому я добавил Это в мой .vimrc
:
nmap <cr> o.<c-h><esc>
всякий раз, когда мне нужна пустая строка для ее отступа, я бы использовал <enter>
вместо.