1

为什么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

上面所有这些设置都将键<F2>重新映射到字符串"<F2>",当我在插入模式下按下重新映射的键时,我可以清楚地看到它。Vimautocmdaugroup的正确语法是什么?map {lhs} {rhs}

4

1 回答 1

4

:map命令结合了正常、视觉+选择和操作员挂起模式。如果您想要所有模式,则需要为插入和命令行模式发出单独的:map!(with )。!:help map-modes因此,您在插入模式下的故障排除尝试是无效的。

但是还有另一个问题:在 中:autocmd{pat}文件模式是当前缓冲区的文件名,而不是颜色方案名称。您可以使用以下 autocmd 看到这一点:

:autocmd ColorScheme * echomsg "file is" expand('<afile>')

不会打印颜色方案名称,而是当前缓冲区的名称。让事件在方案名称上工作会很好ColorScheme,但目前还没有以这种方式实现。因此,您聪明的重新映射方案将不起作用。

相反,定义一个:autocmd ColorScheme *,并使用条件(在g:colors_name包含当前颜色方案名称的变量上)来切换/移动颜色方案,或者只使用映射内的条件,如下所示:

:nnoremap <F2> :execute 'colorscheme' (g:colors_name ==# 'default' ? 'elflord' : 'default')<CR>

PS:你应该使用:noremap; 它使映射不受重新映射和递归的影响。

于 2013-09-25T07:19:25.697 回答