我試圖在寫入磁盤時修改BufWritePre中的文件, ,然後在BufWritePost中取消這些修改,因此 工作緩衝區中的文本保持不變。問題在於,在BufWritePre中完成的操作之前,撤消操作似乎總是撤銷上次撤銷操作 ,以及在BufWritePre中完成的更改 。undo bufwritepre問題,Vim中的bufwritepost事件
下面是代碼:
" BufWritePre function
function! <SID>GlobalUnconvertTags()
let g:save_cursor = getpos(".")
g/^\*\+\s/call UnconvertTags(line("."))
endfunction
" BufWritePost function
function! <SID>UndoUnconvertTags()
undo
call setpos(".",g:save_cursor)
endfunction
是否需要的東西,從一個簡單的撤銷有什麼不同?給出這兩個 函數,因爲它們是,如果我不斷髮出命令':w' 我的緩衝區的undostate將逐步遞增,每次發出w命令時都會返回一個undo 。
要以另一種方式解釋問題,當我持續發出:w
命令時,在緩衝區中看到的內容與我在發出:undo
命令時看到的內容完全相同。寫入時確實在BufWritePre函數中進行了更改,但撤消時,它們總是撤消BufWritePre更改,再加上一次撤消將向後移動實際緩衝區狀態。
我試着改變職能,明確全球化志願服務青年撤消 狀態(如下圖),但是這不工作之一:
" BufWritePre function
function! <SID>GlobalUnconvertTags()
let g:save_cursor = getpos(".")
let s:undostate = changenr()
g/^\*\+\s/call UnconvertTags(line("."))
endfunction
" BufWritePost function
function! <SID>UndoUnconvertTags()
execute "undo ".s:undostate
call setpos(".",g:save_cursor)
endfunction
我想我錯過的是如何撤消應該簡單的東西在這兩個事件之間工作 ,但我無法弄清楚什麼。 BufWritePost的文檔 似乎表明一個簡單的「撤消」將是所有需要的。但是這對我不起作用。任何提示讚賞。