vim автоматически форматирует HTML-файлы с помощью Tidy и тег <script>с помощью Jsbeautifull - PullRequest
1 голос
/ 29 февраля 2012

Как мне отформатировать html-файлы в vim, используя tidy , и отформатировать только содержимое тегов сценария, используя Jsbeautifull ?

У меня есть эта команда: :%!tidy -i -xml --char-encoding utf8 --wrap 0 --show-errors 0 2>/dev/null для форматирования html-файлов,

и :call g:Jsbeautify() для форматирования файла js.Как я могу вызвать g:Jsbeautifull() только для содержимого тегов скрипта?Jsbeautifull(js_script, options) может принять источник js в качестве аргумента.

И я хочу сопоставить его с <C-S-f>.

Ответы [ 2 ]

0 голосов
/ 02 марта 2012

Поэтому, когда никто не отвечает на мой вопрос, мне пришлось изучить некоторые сценарии vim, и я сделал это!

Я скопировал ~/.vim/plugin/jsbeautify.vim в ~/.vim/plugin/jsbeautify_replace.vim и изменил его. Вот это diff jsbeautify.vim jsbeautify_replace.vim:

1c1
< if &cp || exists("loaded_jsbeautify")
---
> if &cp || exists("loaded_jsbeautify_replace")
4c4
< let loaded_jsbeautify = 3
---
> let loaded_jsbeautify_replace = 3
286,291c286
< "function! g:Jsbeautify(js_source_text)
< function! g:Jsbeautify()
<   if !s:is_js()
<       echo "Not a JS file."
<       return
<   endif
---
> function! Jsbeautify_replace(js_source_text, indent)
310c305
<   let lines = getline(1, "$")
---
>   "let lines = getline(1, "$")
312,313c307,308
<   let s:input = join(lines, "\n")
<   "let s:input = a:js_source_text
---
>   "let s:input = join(lines, "\n")
>   let s:input = a:js_source_text
617c612
<   
---
> 
619,622c614,615
<   :g/.*/d
<   let @0 = ret
<   :put!0
< endfunction
---
>   let lines = split(ret, '\n')
>   let result = ""
624c617,624
< nnoremap <silent> <leader>ff :call g:Jsbeautify()<cr>
---
>   for line in lines
>       let result .= a:indent."  ".line."\n"
>   endfor
>   ":g/.*/d
>   "let @0 = ret
>   ":put!0
>   return a:indent."<script type=\"text/javascript\">\n".result.a:indent."</script>"
> endfunction

И написал сценарий на ~/.vim/plugin/tidy_jsbeautify.vim:

function! g:tidy_js()
    %!tidy -i -xml --char-encoding utf8 --wrap 0 --show-errors 0 2>/dev/null
    %s#\(\s*\)<script\_\s*type="text/[jJ]ava[sS]cript"\_\s*>\(\_.\{-1,}\)</script>#\= Jsbeautify_replace(submatch(2),submatch(1))#g
endfunction

Это вызывает tidy в моем буфере, а затем ко всему содержимому тега script будет добавлен jsbeautify + отступ тега script. А потом в ~/.vim/ftplugin/html.vim:

:map <buffer> <C-f> :call g:tidy_js()

А теперь мой HTML-файл полностью отформатирован с помощью ярлыка CTRL+F ENTER:)

0 голосов
/ 29 февраля 2012

В jsbeautify.vim, строка 310 показывает, что это невозможно, если вы не измените плагин:

let lines = getline(1, "$")

Возможно, вы хотите настроить эту часть (измените функцию g:Jsbeautify(), чтобы взять двааргументы и использовать getline(a:start, a:end) вместо.

...