目前我正在使用两个不同的键来设置colorscheme
map <F8> :colors wombat256 <cr> map <F9> :colors dimtag <cr>
我想实现像这样的切换行为
function! ToggleDimTags() if (g:colors_name == "wombat256") colors dimtag else colors wombat256 endif endfunction
我的问题是ToogleDimTags()在每次调用时都将光标位置重置为第一行,这是不可取的.任何建议赞赏.
正如评论中所讨论的,问题是您的地图调用:执行
行为有点不同,你可能想要的是:改为:
行为有点不同,你可能想要的是:改为:
nnoremap <F5> :call ToggleDimTags()
为了澄清@ZyX的说法,:h:exec包含以下文本:
:exe :execute :exe[cute] {expr1} .. Executes the string that results from the evaluation of {expr1} as an Ex command. [...]
那么:执行的确是评估表达式寻找字符串
它将作为Ex命令执行(也称为冒号命令).换一种说法:
exec ToggleDimTags() | " <-- ToggleDimTags() is evaluated and returns 0 exec 0
这是:
:0
现在,:h:电话:
:cal :call E107 E117 :[range]cal[l] {name}([arguments]) Call a function. The name of the function and its arguments are as specified with |:function|. Up to 20 arguments can be used. **The returned value is discarded**. [...]
更新
我一直在考虑你的功能,并使用三元运算符和一点点
of:执行魔法,你可以将它简化到你丢弃额外的地步
功能:
nnoremap <silent> <F9> :exec "color " . \ ((g:colors_name == "wombat256") ? "dimtag" : "wombat256")<CR>
这里,这个nnoremap不会产生输出(< silent>)并且基于
:exec,后跟此表达式:
"color " . ((g:colors_name == "wombat256") ? "dimtag" : "wombat256")
当g:colors_name设置为wombat256时,表达式的计算结果为:
"color dimtag"
或者,否则:
"color wombat256"