Vim Auto Indent с новой строкой - PullRequest
       6

Vim Auto Indent с новой строкой

39 голосов
/ 18 декабря 2010

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

class {
  |
}

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

class {
|}

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

По сути, я просто хочу, чтобы обычный IDE делал отступы.

update:

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

Ответы [ 6 ]

21 голосов
/ 27 сентября 2012

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

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

19 голосов
/ 08 октября 2012

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

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

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

12 голосов
/ 18 декабря 2010

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

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

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

11 голосов
/ 18 декабря 2010

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

0 голосов
/ 27 февраля 2019

Я написал это в моем .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>
0 голосов
/ 27 ноября 2017

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

# 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

...