Редактирование HTML файла
Как сделать в Vim, чтобы при нажатие на Enter, в середине конструкции <div>_</div>, перводилось на новую строку с отступом и курсор был между обоими div
PS И посоветуйте, плагины для HTML, CSS.
Ответы (1 шт):
Автор решения: Andrej Levkovitch
→ Ссылка
По поводу первой части, к сожалению, ничего не подскажу (в принципе считаю что подобный функционал избыточен) однако подсажу по поводу второй части.
Есть такая тула для проверки и форматирования html: tidy. Плагина под vim для нее я не знаю, но эта тула прекрасно встраивается в vim:
- Сперва добавим вспомагательную функцию для копирования
diffв текущий буфер (копировать весьoutputнельзя, так как в таком случае у вас будут проблемы с откатыванием назад)
function! CopyDiffToBuffer(input, output, bufname)
" prevent out of range in cickle
let min_len=min([len(a:input), len(a:output)])
" copy all lines, that was changed
for i in range(0, min_len - 1)
let output_line=a:output[i]
let input_line=a:input[i]
if input_line != output_line
call setline(i + 1, output_line) " lines calculate from 1, items - from 0
end
endfor
" in this case we have to handle all lines, that was in range
if len(a:input) != len(a:output)
if min_len == len(a:output) " remove all extra lines from input
call deletebufline(a:bufname, min_len + 1, "$")
else " append all extra lines from output
call append("$", a:output[min_len:])
end
end
endfunction
- Собственно функция форматирования:
function! HTMLFormat()
let input=getline(1, "$")
let error_file=tempname()
let output_str=system("tidy -qi -ashtml 2>" . error_file, input)
if len(output_str) " all right
let output=split(output_str, "\n")
call CopyDiffToBuffer(input, output, bufname("%"))
" alse cleare lbuffer
lexpr ""
lwindow
else " we got error
let errors=readfile(error_file)
let source_file=bufname("%")
call insert(errors, source_file) " append filename for right errorformat
set efm=%+P%f,line\ %l\ column\ %c\ -\ %t%*[^:]:\ %m,%-Q
lexpr errors
lwindow 5
end
call delete(error_file)
endfunction
- Функция для проверки ошибок
function! HTMLCheck()
let input=getline(1, '$')
let errors=system('tidy -q -e', input)
if len(errors) " ther are some errors
" append filename for right errorformat
let source_file=bufname("%")
let errors=source_file . "\n" . errors
set efm=%+P%f,line\ %l\ column\ %c\ -\ %t%*[^:]:\ %m,%-Q
lexpr errors
lwindow 5
else " no errors, so we must clear lbuffer
lexpr ""
lwindow
endif
endfunction
- Добавляем комбинации по вкусу для проверки и форматирования, а также автоматом форматируем при закрытии файла:
autocmd FileType html nnoremap <buffer> <c-k> :call HTMLFormat()<cr>
autocmd BufWrite *.html call HTMLFormat()
autocmd FileType html nnoremap <buffer> <c-f> :call HTMLCheck()<cr>
Достаточно установить tidy и добавить этот код в .vimrc и у вас в vim встроенная тула для форматирования и валидации HTML