vim和snipmate,如何撤消扩展

时间:2014-06-06 13:50:22

标签: vim snipmate

我正在使用带有snipmate插件的vim。如何撤消扩展?

# 1) before expansion
def[tab here]

# 2) expanded
def method_name
end

# How to get to 1) step?

1 个答案:

答案 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>