我正在使用带有snipmate插件的vim。如何撤消扩展?
# 1) before expansion
def[tab here]
# 2) expanded
def method_name
end
# How to get to 1) step?
答案 0 :(得分:0)
我通过在触发代码段时显式创建撤消点来实现此功能。挑战在于,相同的密钥(默认为<Tab>
)用于代码段扩展并跳转到下一个制表位。
~/.vim/after/plugin/snipMate.vim
中的这些部分应该这样做。请注意,这并没有处理文字标签后备,因为我已将触发键重新映射到其他内容(请参阅my 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>