2015-12-13 32 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