[英]Vim: remap on every mode except visual
在可视模式下我正在做一个键映射:
: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 指出的那样,“所有模式”都没有 map 命令。 然而,有几种方法可以避免为多种模式多次定义相同的映射。
在这个答案中,作者说明了如何使用 for 循环到 map 同时到多个模式:
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 用于实现相同目的:
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')
使用这些解决方案,您只需定义一次映射。
免责声明:我没有尝试过上述解决方案,但如果它们不适合您,请告诉我们。
查看文档:h map
,您会发现以下内容:
:no[remap] {lhs} {rhs} |mapmode-nvo| *:no* *:noremap* *:nor*
:nn[oremap] {lhs} {rhs} |mapmode-n| *:nn* *:nnoremap*
:vn[oremap] {lhs} {rhs} |mapmode-v| *:vn* *:vnoremap*
:xn[oremap] {lhs} {rhs} |mapmode-x| *:xn* *:xnoremap*
:snor[emap] {lhs} {rhs} |mapmode-s| *:snor* *:snore* *:snoremap*
:ono[remap] {lhs} {rhs} |mapmode-o| *:ono* *:onoremap*
:no[remap]! {lhs} {rhs} |mapmode-ic| *:no!* *:noremap!*
:ino[remap] {lhs} {rhs} |mapmode-i| *:ino* *:inor* *:inoremap*
:ln[oremap] {lhs} {rhs} |mapmode-l| *:ln* *:lnoremap*
:cno[remap] {lhs} {rhs} |mapmode-c| *:cno* *:cnor* *:cnoremap*
:tno[remap] {lhs} {rhs} |mapmode-t| *:tno* *:tnoremap*
您正在寻找的东西似乎没有选择。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.