如何有条件地绑定密钥以在vim中执行两个不同的操作?

时间:2014-06-29 21:53:19

标签: vim

我希望绑定<C-n>来根据编辑器的状态在Vim中做两件事之一。如果我打开标签,我希望切换到下一个标签,否则我希望打开新标签页。我已经查看了帮助并提出了这个问题,但它没有工作,而且我是一个viml noob。

function TabBind()
    if range(tabpagenr()) < 2
        nno <C-n> :tabnew
    else
        nno <C-n> :tabn
    endif
endfunction

这可能吗?如果是这样的话?

2 个答案:

答案 0 :(得分:3)

这个想法是你映射一个决定在飞行中做什么的函数。

function TabBind()
    if tabpagenr('$') < 2
        tabnew
    else
        tabn
    endif
endfunction

nno <C-n> :call TabBind()<cr>

答案 1 :(得分:1)

你也可以定义像单行这样简单的东西。例如,我有以下映射转到下一个diff(在diff模式下),否则转到下一个错误消息。

nnoremap <expr> <silent> <F3>   (&diff ? "]c:call \<sid>NextDiff()\<cr>" : ":cn\<cr>")

在您的情况下,您的映射将是:

nnoremap <expr> <silent> <c-n> (tabpagenr('$') < 2 ? ":tabnew\<cr>" : ":tabn\<cr>")