vim - Vim:重新映射除视觉之外的所有模式
问题描述
在可视模式下我正在做一个键映射:
:vnoremap Ó b
但是,对于所有其他模式,我需要另一个映射。有没有办法做类似的事情:
:'vremap
指定所有其他模式?目前我正在做一些非常冗长的事情,比如:
"Simulate option-shift arrow keys to highlight chunks of text
:vnoremap Ó bv
:vnoremap Ò el
:vnoremap Ô j
:vnoremap k
:nnoremap Ó <Esc>vb
:nnoremap Ò <Esc>vel
:nnoremap Ô <Esc>vj
:nnoremap <Esc>vk
:inoremap Ó <Esc>lvb
:inoremap Ò <Esc>lve
:inoremap Ô <Esc>vj
:inoremap <Esc>vk
解决方案
有没有办法
:'vremap
指定所有其他模式?
正如@Celz 指出的那样,“所有模式”没有地图命令。然而,有几种方法可以避免为多种模式多次定义相同的映射。
在这个答案中,作者说明了如何使用 for 循环同时映射到多个模式:
for map_command in ['nnoremap', 'inoremap']
execute map_command . ' <silent> Ó <Esc>vb'
execute map_command . ' <silent> Ò <Esc>vel'
execute map_command . ' <silent> Ô <Esc>vj'
execute map_command . ' <silent> <Esc>vk'
endfor
在这个答案中,使用包装函数来实现相同的目的:
function! MapBoth(keys, rhs)
execute 'nnoremap' a:keys a:rhs
execute 'inoremap' a:keys a:rhs
endfunction
call MapBoth('Ó', '<Esc>lvb')
call MapBoth('Ò', '<Esc>lve')
call MapBoth('Ô', '<Esc>vj')
call MapBoth('', '<Esc>vk')
使用这些解决方案,您只需定义一次映射。
免责声明:我没有尝试过上述解决方案,但如果它们不适合您,请告诉我们。
推荐阅读
- android - 移动标记时谷歌地图显示两个标记
- c# - EF Core 3.1 OwnersOne 所需属性为空
- python - Python jose.jwt.decode 在 rs256 算法上失败
- azure - 基于 SourcePath 创建一个新变量
- azure-devops - 无法使用 TFS 2015 API。收到 401 未经授权的错误
- javascript - 提交 Input Field 提交后过滤
- kubernetes - 无法将本地容器镜像部署到 k8s 集群
- python - 在 Python-OpenCV 中翻转图像时的翻转点
- javascript - React - 如何将输入字段(受控)重置为默认值
- vue.js - element-ui 中的主题自定义组件