我正在使用带有 snipmate 插件的 vim。如何撤消扩展?
# 1) before expansion
def[tab here]
# 2) expanded
def method_name
end
# How to get to 1) step?
我通过在触发代码段时显式创建撤消点来实现这一点。挑战在于相同的键(<Tab>
默认情况下)用于片段扩展和跳转到下一个制表位。
这些部分~/.vim/after/plugin/snipMate.vim
应该做到这一点。请注意,这不涉及文字选项卡后备,因为我已将触发键重新映射到其他内容(请参阅我的 fork),并且不关心该部分,但您可以从中提取相关部分TriggerSnippet()
并将其添加到有条件的。
function! s:UndoPointBeforeSnippet()
return (exists('g:snipPos') ? '' : "\<C-g>u")
endfunction
inoremap <expr> <SID>(UndoPointBeforeSnippet) <SID>UndoPointBeforeSnippet()
ino <silent> <script> <tab> <SID>(UndoPointBeforeSnippet) <c-r>=TriggerSnippet()<cr>