用于切换颜色方案的vim函数

用于切换颜色方案的vim函数,vim,Vim,目前,我正在使用两个不同的键来调整配色方案 map <F8> :colors wombat256 <cr> map <F9> :colors dimtag <cr> 我的问题是ToogleDimTags()每次调用都会将光标位置重置为第一行,这是不可取的。感谢您的建议。如评论中所述,问题在于您的地图调用:执行 行为有点不同,您可能需要的是:调用: nnoremap <F5> :call ToggleDimTags() 所以:exec

目前,我正在使用两个不同的键来调整配色方案

map <F8> :colors wombat256 <cr>
map <F9> :colors dimtag <cr>

我的问题是
ToogleDimTags()
每次调用都会将光标位置重置为第一行,这是不可取的。感谢您的建议。

如评论中所述,问题在于您的地图调用
:执行

行为有点不同,您可能需要的是
:调用

nnoremap <F5> :call ToggleDimTags()
所以
:execute
真正做的是计算表达式以查找字符串 它将作为Ex命令(也称为冒号命令)执行。换言之:

exec ToggleDimTags() | " <-- ToggleDimTags() is evaluated and returns 0
exec 0
现在,
:h:call

                                                 :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
:执行
magic,您可以将其简化到丢弃多余部分的程度 功能:

nnoremap <silent> <F9> :exec "color " .
    \ ((g:colors_name == "wombat256") ? "dimtag" : "wombat256")<CR>
g:colors\u name
设置为
wombat256
时,表达式的计算结果为:

"color dimtag"
否则:

"color wombat256"
然后通过
:exec
对其中任何一个进行评估。你当然可以加入队伍 (没有忘记删除反斜杠),我这样做只是为了避免
行太长。

能否添加用于调用
ToggleDimTags()
:map
命令?我怀疑这可能是根本原因。请尝试
:call ToggleDimTags()
@如果有效,请将其添加为答案。@sidyll有效,添加它以便我可以将其设置为answered@sidyll:请添加您的评论作为答案,以便Eric能够接受。@Eric Fortis&@yoda:谢谢,但我会为此感到难过@我想他的答案是可以接受的。让我们等一下,直到他再次登录。非常好的总结。很高兴你添加了它。啊哈@值得注意的编译器发现:-)我希望你不介意,但我代替你发布了这个答案,同时添加了一些参考书目。@Eric Fortis,我刚刚用另一种解决方案更新了答案。一点也不介意。你在评论中添加的内容比我多,你的回答比我的要有用得多。干杯
nnoremap <silent> <F9> :exec "color " .
    \ ((g:colors_name == "wombat256") ? "dimtag" : "wombat256")<CR>
"color " . ((g:colors_name == "wombat256") ? "dimtag" : "wombat256")
"color dimtag"
"color wombat256"