[英]I have added a mapping to my vimrc it's working as expected but i have a second mapping created that should not
[英]Vimrc mapping not behaving as expected
我已经在视觉和普通模式下创建了一个映射,以加快在本地代码区域中的移动。 如果我按1 +方向键,它将重新映射到10而不是1。
vmap 1j 10j | vmap 1k 10k | vmap 1h 10h | vmap 1l 10l
nmap 1j 10j | nmap 1k 10k | nmap 1h 10h | nmap 1l 10l
这很好。 但是,当我快速键入时,我无意中键入11而不是1,所以'11j'出现在'1j'中。 这使我向下移动了110行而不是11行。
当我犯此错误时,我只想在给定的方向上移动11,而不是110。
Vim将其解释为1,然后添加我的映射以得到110。类似地,如果我键入“ 21j”,它将被解释为“ 210j”。
这应该做什么。 但是我不太确定为什么会这样工作。 当您更改映射中的计数时,似乎旧计数不会被清除,而新计数将附加到旧计数上。 (注意,我在映射中只放置了0,而不是10)
我还使用v:count
来查找映射的计数,而不是重载1j
。 如果未指定计数,则v:count
返回0。
function TenMovement(type)
if v:count == 1
return '0'.a:type
else
return a:type
endif
endfunction
nnoremap <expr> j TenMovement('j')
nnoremap <expr> k TenMovement('k')
nnoremap <expr> l TenMovement('l')
nnoremap <expr> h TenMovement('h')
vnoremap <expr> j TenMovement('j')
vnoremap <expr> k TenMovement('k')
vnoremap <expr> l TenMovement('l')
vnoremap <expr> h TenMovement('h')
要解决此问题,您必须中止先前键入的计数。 <C-\\><Cn>
在正常模式下的作用类似于<Esc>
,但是在没有待处理的计数时避免发出蜂鸣声:
nmap 1j <C-\><C-n>10j
对于可视模式,需要使用gv
重新建立选择:
vmap 1j <C-\><C-n>gv10j
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.