2015-12-13 12 views
1

這個vim腳本保存當前文件並通過js-beautify運行,每次離開insert模式並返回normal模式。通過js-beautify運行vim緩衝區內容而不必保存文件

我想通過js-beautify直接運行緩衝區內容而不必先保存文件,使寫入事件明顯滯後,從而提高效率。

function! TidyAndResetCursor() 
    let cursor_pos = getpos('.') 
    :w 
    %!js-beautify % 
    :w 
    call setpos('.', cursor_pos) 
endfunction 


augroup JSTidy 
    autocmd! 
    autocmd InsertLeave *.js :call TidyAndResetCursor() 
augroup END 

的第二個問題是,有時(例如期間undo)的cursor_pos復位到文檔中的第一行中,也許是因爲保存光標位置不再存在。它應該跳回到最接近的現有值,而不是默認第一行。

非常感謝!

+0

我想你只是想''!js-beautify -'這將取代你當前的緩衝區。在您明確寫入之前不會保存到磁盤。短劃線文件名僅僅意味着stdin對js-beautify。 –

+0

真棒,謝謝! – overflower

+0

見下文,我的js-beautify不喜歡'-'輸入,它從字面上搜索名爲'-'的文件,不知道如何解決這個問題.. – overflower

回答

1

此命令from my own config將所述給定行(默認整個緩衝液)與js-beautify格式化,使用當前shiftwidth,並恢復光標位置:

" reformat selection 
command! -buffer -range=% Format let b:winview = winsaveview() | 
    \ execute <line1> . "," . <line2> . "!js-beautify -f - -j -B -s " . &shiftwidth | 
    \ call winrestview(b:winview) 

用法:

:Format  " format entire buffer 
:3,15Format " format given lines 

參見$ js-beautify --help用於命令行選項。

+0

非常感謝!我的js-beautify不喜歡'-'輸入它抱怨'cat index.js | js-beautify -f - 無法打開路徑「/ home/user/- 」「發生了什麼事? – overflower