【发布时间】:2020-04-17 05:22:47
【问题描述】:
我想知道如何编写一个重载<TAB>的函数。
首先它会检查是否有需要完成的sn-p,如果有sn-p,则展开它。
否则,我希望该函数在按下 Tab 之前检查光标前是否有空格(或者我们在新行上)。如果是这样,那么它应该做常规的<tab>。
否则,我希望它调用
deoplete#manual_complete()
除非已经打开了一个菜单,在这种情况下,我应该能够通过它来切换。
这是我的尝试(完全失败)和一些设置供参考:
let g:ulti_expand_or_jump_res = 0 "default value, just set once
function! Ulti_ExpandOrJump_and_getRes()
call UltiSnips#ExpandSnippetOrJump()
return g:ulti_expand_or_jump_res
endfunction
inoremap <silent><expr> <tab>
\ (Ulti_ExpandOrJump_and_getRes() > 0) ? "\<C-y>"
\ : pumvisible() ? "\<C-n>" :
\ <SID>check_back_space() ? "\<TAB>" :
\ deoplete#manual_complete()
function! s:check_back_space() abort "{{{
let col = col('.') - 1
return !col || getline('.')[col - 1] =~ '\s'
endfunction "}}}
奇怪的是,当我按 Tab 时,vim 的右下角显示我输入了“^I”,这是很奇怪的行为。
我没有将 ultisnips 扩展触发器作为“选项卡”的原因是它禁止使用选项卡进行 deoplete(无论出于何种原因)。
【问题讨论】:
-
我拥有的部分脚本被抓获,以使标签在 github 问题的 deoplete 下正常工作
-
您可能想查看Vi & Vim StackExchange 以了解有关 Vim 和 Vimscript 的问题!
-
@filbranden 我什至不知道它的存在!谢谢