Vim:如何重新映射 "general" 键
Vim: how to remap a "general" key
我非常喜欢 Vim 的一件事是它可以提供多个剪贴板。然而,我讨厌写 "ay
到 yank 和 "ap
到粘贴,我宁愿有更接近经典的 Ctrl-c,Ctrl-v 的东西,比如 ←a
(←: AltGr + y) 和 þa
(þ: AltGr + p).
在这种情况下,我可以像 nnoremap ←a "ay
那样进行重新映射,但那样的话我将只有缓冲区“a”可用于这种方式。所以问题是:我可以做一个重新映射,例如 vim 中的 nnoremap ←{key} "{key}y
,用我键入的任何内容替换 {key},这样我就可以使用任何字符作为寄存器,只有一个重新映射? (←q
变为 "qy
,←w
变为 "wy
,等等...)
顺便说一句:是的,像“←”和“þ”这样的 AltGr 键就像任何其他命令字母一样工作。
映射的 left-hand 端不能是动态的。
处理该限制的最简单方法就是遍历列表:
for reg in 'abcdefghijklmnopqrstuvwxyz'
execute 'nnoremap ←' .. reg .. ' "' .. reg .. 'y'
execute 'nnoremap þ' .. reg .. ' "' .. reg .. 'p'
endfor
参见 :help :for
、:help :execute
、:help expr-..
。
请注意 y
是一个 操作员 并且操作员应该对一项议案进行“操作”。这意味着所有那些 "{char}y
普通模式映射都是无用的。要使其真正有用,您需要:
- 为
y
、 制作视觉模式映射
- 制作一个自定义运算符以在正常模式下使用,请参阅
:help :map-operator
。
我非常喜欢 Vim 的一件事是它可以提供多个剪贴板。然而,我讨厌写 "ay
到 yank 和 "ap
到粘贴,我宁愿有更接近经典的 Ctrl-c,Ctrl-v 的东西,比如 ←a
(←: AltGr + y) 和 þa
(þ: AltGr + p).
在这种情况下,我可以像 nnoremap ←a "ay
那样进行重新映射,但那样的话我将只有缓冲区“a”可用于这种方式。所以问题是:我可以做一个重新映射,例如 vim 中的 nnoremap ←{key} "{key}y
,用我键入的任何内容替换 {key},这样我就可以使用任何字符作为寄存器,只有一个重新映射? (←q
变为 "qy
,←w
变为 "wy
,等等...)
顺便说一句:是的,像“←”和“þ”这样的 AltGr 键就像任何其他命令字母一样工作。
映射的 left-hand 端不能是动态的。
处理该限制的最简单方法就是遍历列表:
for reg in 'abcdefghijklmnopqrstuvwxyz'
execute 'nnoremap ←' .. reg .. ' "' .. reg .. 'y'
execute 'nnoremap þ' .. reg .. ' "' .. reg .. 'p'
endfor
参见 :help :for
、:help :execute
、:help expr-..
。
请注意 y
是一个 操作员 并且操作员应该对一项议案进行“操作”。这意味着所有那些 "{char}y
普通模式映射都是无用的。要使其真正有用,您需要:
- 为
y
、 制作视觉模式映射
- 制作一个自定义运算符以在正常模式下使用,请参阅
:help :map-operator
。