例如,我有一个工作代码,但速度不够快,所以我想记录这个版本的代码,然后继续优化它,并且可能有更好的版本,然后再次记录这个版本,等等。 / p>
如果我最终无法获得快速代码,我想回滚到原始的工作代码。
我想这可以通过使用undo分支来实现,但我没有找到如何做到这一点。
答案 0 :(得分:7)
答案 1 :(得分:6)
是的,您可以添加撤消分支功能,使其更像版本控制系统。
在vim 7.3中,您可以进行持久撤消,如here所述,您只需将以下行添加到.vimrc
。
set undodir=~/.vim/undodir
set undofile
为了充分利用撤消分支,我强烈推荐gundo,因为您可以使用它来可视化树并查看提交的差异。
答案 2 :(得分:2)
有vim的插件。
答案 3 :(得分:2)
使用版本控制系统绝对是您工作的任何项目的好主意,即使它们相当小。即便如此,HaskellElephant也提出了一个很好的观点 - 偶尔,您可能会尝试使用想要调整的小型一次性脚本。在这种情况下能够创建保存点实际上可能非常酷,所以我玩了vim的undotree()
函数并想出了这个脚本:
command! -nargs=1 StoreUndo call s:StoreUndo(<f-args>)
function! s:StoreUndo(label)
if !exists('b:stored_undo_state')
let b:stored_undo_state = {}
endif
let b:stored_undo_state[a:label] = undotree()['seq_cur']
endfunction
command! -nargs=1 -complete=custom,s:CompleteUndoStates RestoreUndo call s:RestoreUndo(<f-args>)
function! s:RestoreUndo(label)
if !exists('b:stored_undo_state')
let b:stored_undo_state = {}
endif
if !has_key(b:stored_undo_state, a:label)
echoerr a:label.' not found in stored undo states.'
endif
exe 'undo '.b:stored_undo_state[a:label]
endfunction
function! s:CompleteUndoStates(A, L, P)
if !exists('b:stored_undo_state')
let b:stored_undo_state = {}
endif
return join(keys(b:stored_undo_state), "\n")
endfunction
这里是gist形式:https://gist.github.com/1473170
例如,您可以将其置于~/.vim/plugin
下。执行命令:StoreUndo foo
将创建名为“foo”的保存点。你可以做任何你喜欢的改变。执行:RestoreUndo foo
时,缓冲区将恢复已保存的状态。 RestoreUndo
命令已完成选项卡,包含所有现有保存点。
这不会保留在文件中。如果关闭缓冲区,则会丢失历史记录,因此这只能暂时用于快速实验。
答案 4 :(得分:0)
我不是vim的专家(事实上,我几乎无法使用它),但我想到的解决方案是: