Variables 如何从脚本/命令行设置全局变量?
我试图创建一个小菜单,从“YouCompleteMe”切换到“Supertab”,反之亦然Variables 如何从脚本/命令行设置全局变量?,variables,vim,tabs,global-variables,Variables,Vim,Tabs,Global Variables,我试图创建一个小菜单,从“YouCompleteMe”切换到“Supertab”,反之亦然 function! TabFunction() if !exists("g:WhatTab") let g:WhatTab = "Tab function?" endif if !exists("g:MenuTab_choices") let g:MenuTab_choices = "&SuperTab\n&YouCompleteMe" endif let n = c
function! TabFunction()
if !exists("g:WhatTab")
let g:WhatTab = "Tab function?"
endif
if !exists("g:MenuTab_choices")
let g:MenuTab_choices = "&SuperTab\n&YouCompleteMe"
endif
let n = confirm(g:WhatTab, g:MenuTab_choices, "Question")
if n == 1
let g:SuperTabMappingForward = '<Tab>'
let g:SuperTabMappingBackward = '<S-Tab>'
let g:ycm_key_list_select_completion = ['<C-Tab>', '<Down>']
let g:ycm_key_list_previous_completion = ['<C-S-Tab>', '<Up>']
elseif n == 2
let g:SuperTabMappingForward = '<C-Tab>'
let g:SuperTabMappingBackward = '<C-S-Tab>'
let g:ycm_key_list_select_completion = ['<Tab>', '<Down>']
let g:ycm_key_list_previous_completion = ['<S-Tab>', '<Up>']
endif
endfun
函数!TabFunction()
如果!存在(“g:WhatTab”)
让g:WhatTab=“Tab函数?”
恩迪夫
如果!存在(“g:菜单选项”)
让g:MenuTab_choices=“&SuperTab\n&YouCompleteMe”
恩迪夫
让n=确认(g:WhatTab,g:MenuTab_选项,“问题”)
如果n==1
设g:SuperTabMappingForward=''
设g:SuperTabMappingBackward=''
让g:ycm_key_list_select_completion=['',]
让g:ycm_键_列表_上一个_完成=['',]
elseif n==2
设g:SuperTabMappingForward=''
设g:SuperTabMappingBackward=''
让g:ycm_key_list_select_completion=['',]
让g:ycm_键_列表_上一个_完成=['',]
恩迪夫
结束
这不起作用。当我试图从命令行检查这些变量的值时
:回显“全局变量”
这些值是正确的,但它们不能按预期工作
不能这样声明全局变量吗?使用
g:
变量前缀可确保全局变量在函数内设置;这是正确的。您的问题是插件配置变量如g:SuperTabMappingForward
在插件加载期间(当Vim启动时)只计算一次,而不是在运行时。这种机制不适用于动态重新配置
解决
您必须自己重新映射,而不是切换(忽略的)配置变量。至少SuperTab定义了相应的…
目标;我想YCM也会这样做:
if n == 1
imap <Tab> <Plug>SuperTabForward
...
elseif n == 2
imap <C-Tab> <Plug>SuperTabForward
如果n==1
imap超级表转发
...
elseif n==2
imap超级表转发
或者,蛮力变体是重新加载插件(
:runtime plugin/supertab.vim
),以获得要考虑的更改的全局变量值,但这非常低效,可能会导致错误,并使您另外处理插件加载保护。(关于从函数中设置全局变量)。谢谢您Ingo。Youcompleteme执行如下映射:exe'inoremap pumvisible()?“\”:“\”“
当我在n==2
中使用它时,它部分起作用:有时当我使用youcompleteme键时,会出现一些建议,但有时也会出现SuperTab建议。它似乎仍在使用SuperTab。该映射中的插件触发器在哪里?图片中仍然缺少一些东西…这两个映射中没有插件触发器。”bundle映射中的ucompleteme.vim文件(autoload中的一个youcompleteme.vim,插件映射中的一个youcompleteme.vim)那么YCM是否仅仅依赖于'completefunc'
或'omnifunc'
?那么您根本不需要切换SuperTab映射,而是配置完成源代码!我不太了解您。这是YCM completefunc映射吗?命令!-nargs=*-complete=custom,youcomplete#子命令complete\YcmCompleter calls:CompleterCommand()