保存特定键的映射?

时间:2014-10-10 19:34:42

标签: vim

如何在vim中保存特定键的映射,我可以将键映射到另一个命令而不是恢复前一个命令?我也对保存特定缓冲区的映射感兴趣。

3 个答案:

答案 0 :(得分:3)

你可以找出例如<Leader>x映射到via

:map <Leader>x

如果这是一个插件,它可能是<Plug>PluginNameMappingName

然后你可以

:map <Leader>x :echo "something else"<CR>

以后通过

恢复
:map <Leader>x <Plug>PluginNameMappingName

这同样适用于缓冲区本地映射;只需使用<buffer>关键字。

替代

还有maparg()在Vimscript中动态查询。

要暂时覆盖全局映射,您只需定义缓冲区本地映射;它会覆盖全局的,然后在您完成时:unmap <buffer> ...。当然,这仅适用于该缓冲区,但您不需要保存和恢复原始映射。

注意事项

  • 这对:map <expr>不起作用,但这些很少见,而且应该包含在法线贴图中。
  • 这也适用于脚本本地映射目标(以<SNR>42_...开头),但您不会硬编码那个,因为数量取决于采购订单,并且必然会发生变化

答案 1 :(得分:2)

您可以使用maparg()函数返回包含映射和(几乎)所有标志的字典。

例如,您希望在正常模式下获取<Leader>h的映射,您可以使用以下命令保存映射:

:echo maparg("<Leader>h", 'n', '', 1)
{'silent': 1, 'noremap': 0, 'lhs': '\h', 'mode': 'n', 'nowait': 0, 'expr': 0, 'sid': 37, 'rhs': '<Plug>(ChangesStageHunk)', 'buffer': 0}

要恢复映射,您需要从该输出重建命令,例如以上将重建为:

:nmap <silent><nowait> <Leader>h <Plug>(ChangesStageHunk)

嗯,看起来它缺少<script><unique>标志。

答案 2 :(得分:2)

您可以使用:h maparg()检索特定映射的右侧(和更多):

:let foo = maparg('<F6>', 'n')