该功能无法正常工作

时间:2013-10-21 09:32:32

标签: vim

今天,我将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 时,此功能的目的是根据当前条件做一些不同的事情:

  1. 如果当前行填充了空格,则只需添加一个标签。
  2. 如果出现弹出菜单,请向下移动。
  3. 否则,添加字符串“hello”。
  4. (老实说,我想在方案3中做的是调用另一个函数。但无论如何 - 为了简化问题,我只是想在这种情况下显示一个字符串。)

    假设我正在通过Vim编辑我的文件并输入字符串“123”(例如)。目前,当我按 Tab 时,实际结果是添加了<tab>。预期的结果是流应该进入条件3并添加字符串“hello”。我今天下午花了它。

    那么,任何人都可以帮我解决这个问题吗?理解!

1 个答案:

答案 0 :(得分:2)

您的CleverTab()函数的范围是全局的。如果另一个插件定义了相同的功能,前者将被覆盖。为避免此类冲突,应避免使用全局函数。而是使用脚本本地函数s:CleverTab(),通过<SID>CleverTab()或自动加载函数myplugin#CleverTab()从映射中调用。

如果问题是另一个插件覆盖了您的<Tab>映射,则必须选择另一个映射键,或者决定其中一个。只有当你的函数是原始函数的扩展(并提供兼容的返回类型)时,你可以从你的内部调用另一个函数(假设你使用了不同的函数名,如我的第一段所述)。