今天,我将Vim从7.3升级到7.4。但是,以下函数CleverTab()
似乎不起作用。 (我不确定此事是否是更新。)
function! CleverTab()
if strpart( getline('.'), 0, col('.')-1 ) =~ '^\s*$'
return "\<Tab>"
endif
if pumvisible()
return "\<C-N>"
endif
return "hello"
endfunction
inoremap <silent><tab> <C-R>=CleverTab()<CR>
当按下 Tab 时,此功能的目的是根据当前条件做一些不同的事情:
(老实说,我想在方案3中做的是调用另一个函数。但无论如何 - 为了简化问题,我只是想在这种情况下显示一个字符串。)
假设我正在通过Vim编辑我的文件并输入字符串“123”(例如)。目前,当我按 Tab 时,实际结果是添加了<tab>
。预期的结果是流应该进入条件3并添加字符串“hello”。我今天下午花了它。
那么,任何人都可以帮我解决这个问题吗?理解!
答案 0 :(得分:2)
您的CleverTab()
函数的范围是全局的。如果另一个插件定义了相同的功能,前者将被覆盖。为避免此类冲突,应避免使用全局函数。而是使用脚本本地函数s:CleverTab()
,通过<SID>CleverTab()
或自动加载函数myplugin#CleverTab()
从映射中调用。
如果问题是另一个插件覆盖了您的<Tab>
映射,则必须选择另一个映射键,或者决定其中一个。只有当你的函数是原始函数的扩展(并提供兼容的返回类型)时,你可以从你的内部调用另一个函数(假设你使用了不同的函数名,如我的第一段所述)。