我使用常见的技巧让j和k在正常模式下通过将其添加到我的vimrc包装线更好地工作:
nnoremap <silent> j gj
nnoremap <silent> k gk
我只是考虑在视觉模式下使用它:
vnoremap <silent> j gj
vnoremap <silent> k gk
它在普通视觉模式下效果很好,但它在视线模式(Shift + V)或视觉模式下很糟糕。因为我想在这些模式中移动实际行,而不是在同一行中上下移动。
我怎样才能在正常视觉模式下使用此地图?
答案 0 :(得分:3)
无法让gj
使用V (line-wise visual)
模式。
假设它可以工作,那么当你在很长(包裹)的线上做gj
时,vim将选择一条线的一部分,也就是说,它不再是直线视觉模式
按行选择的最小选定单位应为一行。
我必须澄清,如果您选择了V
,在选定区域中的长行,gj
有效,它会向上/向下移动光标。但是如果你想让gj
另外选择一个&#34;屏幕线&#34;下来,它不会工作,gj
这里与j
一种解决方法(仅以j/gj
为例)
nnoremap V :vnoremap j j<cr>V
nnoremap v :vnoremap j gj<cr>v
或(Peter Rincker的建议)
xnoremap <expr> j mode() ==# 'V' ? 'j' : 'gj'
答案 1 :(得分:0)
感谢@Kent他的回答,我找到了一种方法,让我的工作方式符合我的想法。
nnoremap <silent> V :silent! vunmap j<cr>:silent! vunmap k<cr>V
nnoremap <silent> v :vnoremap j gj<cr>:vnoremap k gk<cr>v
vnoremap <silent> V <esc>:silent! vunmap j<cr>:silent! vunmap k<cr>gvV
vnoremap <silent> v <esc>:vnoremap j gj<cr>:vnoremap k gk<cr>gvv
然而,我确实认为这是一个丑陋的黑客,因为它会在每次按v
或V
时取消映射并映射密钥。