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