Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何有条件地绑定一个键以在vim中执行两个不同的操作?_Vim - Fatal编程技术网

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

如何有条件地绑定一个键以在vim中执行两个不同的操作?,vim,Vim,根据编辑器的状态,我想在Vim中绑定两件事情中的一件。如果我打开了选项卡,我希望它切换到下一个选项卡,否则我希望它打开一个新选项卡。我已经看到了帮助,并想出了这个,但它不起作用,我是一个viml noob function TabBind() if range(tabpagenr()) < 2 nno <C-n> :tabnew else nno <C-n> :tabn endif endfunction 这

根据编辑器的状态,我想在Vim中绑定两件事情中的一件。如果我打开了选项卡,我希望它切换到下一个选项卡,否则我希望它打开一个新选项卡。我已经看到了帮助,并想出了这个,但它不起作用,我是一个viml noob

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

这可能吗?如果是这样的话,怎么做呢?

我们的想法是映射一个函数,该函数决定动态执行什么操作

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

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

其思想是映射一个函数,该函数决定动态执行的操作

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

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

您还可以定义一行程序这样简单的事情。例如,我有以下映射以在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>")

您还可以定义一行程序这样简单的事情。例如,我有以下映射以在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>")

你不需要函数中的:。你不需要函数中的:。我很欣赏代码高尔夫,如果我不是vim脚本noob,我可能会使用这个解决方案,但由于我是noob,我将使用@buff的答案,因为它帮助我更好地理解vim脚本。这仍然是vim脚本。vim脚本有很多方面:VimL的强制使用与Ex命令、动作和动作相结合,可通过以下方式引用:normal和:exe、映射等等,在本例中为:h map-,等等。总之,关于vim scripting.True,vim.wika上有许多很好的提示/文章。谢谢你提供的资源我很欣赏code golf,如果我不是vim脚本noob,我可能会使用这个解决方案,但由于我是noob,我将使用@buff的答案,因为它帮助我更好地理解vim脚本。这仍然是vim脚本。vim脚本有很多方面:VimL的强制使用与Ex命令、动作和动作相结合,可通过以下方式引用:normal和:exe、映射等等,在本例中为:h map-,等等。总之,关于vim scripting.True,vim.wika上有许多很好的提示/文章。谢谢你提供的资源