{ 和 } 的映射在像“di{”这样的链命令中不起作用

{ 和 } 的映射在像“di{”这样的链命令中不起作用

我映射了以下内容并尝试激活其中一个或两个映射,希望覆盖所有 vim 模式:

map! ĸ {
map ĸ {

映射按预期在插入模式和正常模式下工作,但是当我尝试执行诸如di{删除一对大括号内的所有内容之类的命令时{},什么也没有发生。递归映射适用于{另一个命令,如果我使用ino {它,则会失败,因此它必须处于活动状态......

我不明白为什么它在链接命令中不起作用。

答案1

问题在于,这i{是一个完整的操作员挂起命令(或文本对象),并且映射实际上不适用于现有命令或映射的后续部分。如果您想在操作员挂起和可视模式下支持i{(及其朋友a{),您将需要一组额外的映射来明确执行此操作:

omap iĸ i{
omap aĸ a{
xmap iĸ i{
xmap aĸ a{

但完成此键映射的更好方法是使用'langmap'功能,允许您在正常模式下重新映射按键。对于您的特定用例,您还需要设置'langremap'.

set langmap=ĸ{
set langremap

这将处理正常模式、视觉模式、操作员挂起模式以及涉及符号的映射{

它不会处理插入模式或命令行模式。为此,您可以继续使用 a :map!(通常效果很好),或者还有一个'keymap'插入模式的选项相当于'langmap',但'keymap'要复杂得多(它涉及使用独特的语法创建单独的映射文件,并且有一些附加选项控制确切激活映射的位置。)

相关内容