Ответ 1
Поместите это в свой .vimrc:
imap <C-Return> <CR><CR><C-o>k<Tab>
Предполагая, что autoindent
и smartindent
установлены правильно, набрав Ctrl + Return
между фигурными скобками, вы поместите курсор туда, где вы хотите.
Как мне получить vim, чтобы поместить курсор в фигурные скобки, начиная с новой строки, т.е. с | обозначая позицию курсора:
class {
|
}
прямо сейчас с моими настройками он делает это только
class {
|}
Я получил это в своем .vimrc файле set autoindent shiftwidth = 2 tabstop = 2 noexpandtab
В принципе, я просто хочу, чтобы нормальная среда была отступом.
обновление:
Я нашел, как это сделать с помощью inoremap { {<CR>}<Esc>O
Поместите это в свой .vimrc:
imap <C-Return> <CR><CR><C-o>k<Tab>
Предполагая, что autoindent
и smartindent
установлены правильно, набрав Ctrl + Return
между фигурными скобками, вы поместите курсор туда, где вы хотите.
Я обнаружил, что delimitMate делает именно то, что вы описываете, и многое другое (то есть автоматически вставляя окончание }
). Обратите внимание, что вы должны сообщить delimitMate о расширении возврата каретки, добавив let delimitMate_expand_cr=1
в вашу конфигурацию.
Из моего наблюдения это именно то поведение, которое наблюдается в TextMate и SublimeText.
У меня 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, поэтому некоторые объяснения могут быть не столь точными. Это, как я думаю, работает.
autoindent
означает, что он переносит текущий уровень отступа на последующие строки. Чтобы получить отступ в соответствии с синтаксисом, вам необходимо указать флаг, например smartindent
или cindent
.
В нижней части файла я использую:
# 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
Я написал это в моем .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>
Я сделал плагин для этого, я все еще использую