Редактирование HTML файла

Как сделать в Vim, чтобы при нажатие на Enter, в середине конструкции <div>_</div>, перводилось на новую строку с отступом и курсор был между обоими div

PS И посоветуйте, плагины для HTML, CSS.


Ответы (1 шт):

Автор решения: Andrej Levkovitch

По поводу первой части, к сожалению, ничего не подскажу (в принципе считаю что подобный функционал избыточен) однако подсажу по поводу второй части.

Есть такая тула для проверки и форматирования html: tidy. Плагина под vim для нее я не знаю, но эта тула прекрасно встраивается в vim:

  1. Сперва добавим вспомагательную функцию для копирования 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
  1. Собственно функция форматирования:
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
  1. Функция для проверки ошибок
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
  1. Добавляем комбинации по вкусу для проверки и форматирования, а также автоматом форматируем при закрытии файла:
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

→ Ссылка