![{ 和 } 的映射在像“di{”这样的链命令中不起作用](https://linux22.com/image/181088/%7B%20%E5%92%8C%20%7D%20%E7%9A%84%E6%98%A0%E5%B0%84%E5%9C%A8%E5%83%8F%E2%80%9Cdi%7B%E2%80%9D%E8%BF%99%E6%A0%B7%E7%9A%84%E9%93%BE%E5%91%BD%E4%BB%A4%E4%B8%AD%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8.png)
我映射了以下内容并尝试激活其中一个或两个映射,希望覆盖所有 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'
要复杂得多(它涉及使用独特的语法创建单独的映射文件,并且有一些附加选项控制确切激活映射的位置。)