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

Vim Auto Отступ с новой строкой

Как мне получить vim, чтобы поместить курсор в фигурные скобки, начиная с новой строки, т.е. с | обозначая позицию курсора:

class {
  |
}

прямо сейчас с моими настройками он делает это только

class {
|}

Я получил это в своем .vimrc файле set autoindent shiftwidth = 2 tabstop = 2 noexpandtab

В принципе, я просто хочу, чтобы нормальная среда была отступом.

обновление:

Я нашел, как это сделать с помощью inoremap { {<CR>}<Esc>O

4b9b3361

Ответ 1

Поместите это в свой .vimrc:

imap <C-Return> <CR><CR><C-o>k<Tab>

Предполагая, что autoindent и smartindent установлены правильно, набрав Ctrl + Return между фигурными скобками, вы поместите курсор туда, где вы хотите.

Ответ 2

Я обнаружил, что delimitMate делает именно то, что вы описываете, и многое другое (то есть автоматически вставляя окончание }). Обратите внимание, что вы должны сообщить delimitMate о расширении возврата каретки, добавив let delimitMate_expand_cr=1 в вашу конфигурацию.

Из моего наблюдения это именно то поведение, которое наблюдается в TextMate и SublimeText.

Ответ 3

У меня Ubuntu 12.04, и я не нашел файл vimrc в домашнем каталоге. Глобальный vimrc файл находился в /etc/vim/vimrc.
В этом файле почти ничего не было. Поэтому для меня это сработало, чтобы добавить эти 3 строки в конец /etc/vim/vimrc

set autoindent
set cindent
inoremap { {<CR>}<up><end><CR>

Когда вы наберете { в следующий раз, он будет изменен комбинацией {, Enter, }, up, end, Enter. cindent и autoindent добавят необходимое количество вкладок.
P.S. Я не умею настраивать vim, поэтому некоторые объяснения могут быть не столь точными. Это, как я думаю, работает.

Ответ 4

autoindent означает, что он переносит текущий уровень отступа на последующие строки. Чтобы получить отступ в соответствии с синтаксисом, вам необходимо указать флаг, например smartindent или cindent.

Ответ 5

В нижней части файла я использую:

# vim: ts=2 sw=2 sts=2 sr noet st ai si

Например Dockerfile:

FROM centos-7
RUN ...
CMD ...

# vim: ts=2 sw=2 sts=2 sr noet st ai si

Если вы хотите сохранить только отступы, используйте # vim: st ai si

Ответ 6

Я написал это в моем .vimrc

inoremap <expr> <CR> InsertMapForEnter()
function! InsertMapForEnter()
    if pumvisible()
        return "\<C-y>"
    elseif strcharpart(getline('.'),getpos('.')[2]-1,1) == '}'
        return "\<CR>\<Esc>O"
    elseif strcharpart(getline('.'),getpos('.')[2]-1,2) == '</'
        return "\<CR>\<Esc>O"
    else
        return "\<CR>"
    endif
endfunction

Приведенный выше код сначала проверяет, используете ли вы Enter чтобы подтвердить завершение кода, если нет, то при вводе Enter будет отступать {|}. Кроме того, он предоставляет HTML-теги с автоматическим отступом.

Для вашей проблемы:

class {|}

нажмите Enter и вы получите

class {
    |
}
<html>|<html>

нажмите Enter и вы получите

<html>
    |
</html>