1

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

# 1) before expansion
def[tab here]

# 2) expanded
def method_name
end

# How to get to 1) step?
4

1 回答 1

0

我通过在触发代码段时显式创建撤消点来实现这一点。挑战在于相同的键(<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>
于 2014-06-06T14:45:21.553 回答