1

今天,我将我的 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”。

(老实说,在场景 3 中我想做的是调用另一个函数。但无论如何——为了让问题变得简单,我只是想在这种情况下显示一个字符串。)

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

那么,任何人都可以帮我弄清楚吗?赞赏!

4

1 回答 1

2

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

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

于 2013-10-25T07:28:35.620 回答