每次离开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
重置到文档的第一行,可能是因为保存光标位置不再存在。它应该跳回最近的现有的而不是默认为第一行。
非常感谢!
答案 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
。