这个vim脚本保存当前文件,并在我每次离开insert模式并返回到normal模式时通过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重置为文档中的第一行,可能是因为保存光标位置不再存在。它应该跳回到最接近的现有行,而不是缺省到第一行。
非常感谢!
发布于 2015-12-13 18:01:06
此命令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。
https://stackoverflow.com/questions/34247339
复制相似问题