为什么 Vim (文本编辑器)的以下运行时配置设置无法正常运行?
autocmd colorscheme default map <F2> :colorscheme elflord<CR>
autocmd colorscheme elflord map <F2> :colorscheme default<CR>
autocmd! colorscheme default map <F2> :colorscheme elflord<CR>
autocmd! colorscheme elflord map <F2> :colorscheme default<CR>
augroup CScheme
autocmd!
autocmd colorscheme default map <F2> :colorscheme elflord<CR>
autocmd colorscheme elflord map <F2> :colorscheme default<CR>
augroup END
上面的所有设置都将键&lt; F2&gt; 重新映射到字符串“&lt; F2&gt;”中,当我按下重新映射时,我可以清楚地看到它我在插入模式时键。在Vim中autocmd
和augroup
与map {lhs} {rhs}
的正确语法是什么?
答案 0 :(得分:3)
:map
命令结合了普通,视觉+选择和操作员待定模式。如果您需要所有模式,则需要为插入和命令行模式发出单独的:map!
(带!
)。见:help map-modes
。因此,您在插入模式中的故障排除尝试无效。
但还有另一个问题:在:autocmd
中,{pat}
文件模式是当前缓冲区的文件名,而不是colorscheme名称。您可以使用以下autocmd查看此内容:
:autocmd ColorScheme * echomsg "file is" expand('<afile>')
这将不打印colorscheme名称,但打印当前缓冲区的名称。将ColorScheme
事件用于方案名称会很好,但目前还没有以这种方式实现。因此,您的聪明重映射方案将无效。
相反,定义一个:autocmd ColorScheme *
,并使用条件(在g:colors_name
变量上,其中包含当前的colorscheme名称)来切换/移动colorschemes,或者只使用条件内的条件映射,像这样:
:nnoremap <F2> :execute 'colorscheme' (g:colors_name ==# 'default' ? 'elflord' : 'default')<CR>
PS:You should use :noremap
;它使映射不受重映射和递归的影响。