如何在vim中保存特定键的映射,我可以将键映射到另一个命令而不是恢复前一个命令?我也对保存特定缓冲区的映射感兴趣。
答案 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')