通过js-beautify运行vim缓冲区内容而无需保存文件

时间:2015-12-13 02:21:51

标签: vim vim-plugin

每次离开insert模式并返回normal模式时,此vim脚本会保存当前文件并通过js-beautify运行。

我希望通过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重置到文档的第一行,可能是因为保存光标位置不再存在。它应该跳回最近的现有的而不是默认为第一行。

非常感谢!

1 个答案:

答案 0 :(得分: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