如何在vimrc文件中使用'autocmd'和'augroup'和'map {lhs} {rhs}'?

时间:2013-09-25 07:13:24

标签: vim map editor text-editor

为什么 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中autocmdaugroupmap {lhs} {rhs}的正确语法是什么?

1 个答案:

答案 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;它使映射不受重映射和递归的影响。