2012-02-29 6 views
1

tidyを使用してvimのhtmlファイルをフォーマットし、スクリプトタグのコンテンツの書式をJsbeautifullとするにはどうすればよいですか?vimは自動的にtidyでhtmlファイルをフォーマットし、<script>タグはJsbeautifullで

私は、このコマンドを持っている:htmlファイルをフォーマットするための:%!tidy -i -xml --char-encoding utf8 --wrap 0 --show-errors 0 2>/dev/null

とJSファイルをフォーマットするため、この:call g:Jsbeautify()。スクリプトタグの内容にちょうどg:Jsbeautifull()を呼び出すことができますか? Jsbeautifull(js_script, options)は引数としてjs sourceを取ることができます。

そして私は<C-S-f>にマッピングします。

let lines = getline(1, "$") 

は、おそらくあなたはその部分をカスタマイズしたい(機能g:Jsbeautify() 2つの引数を取り、getline(a:start, a:endを使用するように変更します):jsbeautify.vim

+0

制御シフトはおそらくvimのに認識されないショートカットにだけフォーマットされています。 – Benoit

+0

他のファイルタイプの ''には、他のフォーマッティングツールがあり、動作します。 – microo8

+0

@ microo8 ''が ''と同じ結果をもたらすかどうかチェックしましたか? 1.入力キューの内部表現はこのシーケンスを保持できません。 2.端末エミュレータはこのシーケンスを ''(rxvt-unicode)として送信したり、まったく送信しない(konsole)可能性があります。 '解析時に3.私は' を実行したときに、 'nmapの smth'を行った後、私のvimは' smth'を立ち上げているという事実は、 ''は、\ x06'( '^ F')'に変換される 'ことを意味しますmap'引数を。 – ZyX

答えて

0

だから、私はいくつかのvimのスクリプトを学ばなければならなかったと私はそれを作りました!

私は~/.vim/plugin/jsbeautify_replace.vimから~/.vim/plugin/jsbeautify.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 

これは私のバッファにきちんと呼び出して、すべてのスクリプトタグの内容にjsbeautify +スクリプトタグのインデントがします追加される。そして~/.vim/ftplugin/html.vimに:今

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

そして、私の全体のhtmlファイルがうまくCTRL+F ENTER :)

0

は、ライン310は、プラグインを変更しない場合はこれが不可能であることを示しています代わりに。誰も私の質問に答えていないとき

+0

OKので、私はちょうど 'グラムを変更したとき= getlineの(開始、終了)を(開始終了)をJsbeautifyは'とライン310は 'ラインをできるように、'それが良いでしょうか? – microo8

+0

@ microo8:行310では、引数が 'start'と' end'と呼ばれている場合、 'a:start'と' a:end'を使う必要があります。関数の中では、 'a:'プレフィックスが引数変数に使用されます。 – Benoit

+0

OKだから 'let lines = getline(1、" $ ")'を 'getline(a:start、a:end)'に変更しました。それで? – microo8

関連する問題