通过在我的vimrc中添加以下代码,我使用了一个常用的技巧来让j和k在正常模式下更好地处理换行:
nnoremap <silent> j gj
nnoremap <silent> k gk我只是想通过这样做在视觉模式中使用它:
vnoremap <silent> j gj
vnoremap <silent> k gk它在普通视觉模式下工作得很好,但在视觉线条模式(Shift+V)或视觉块模式下就很糟糕了。因为我想在这些模式下移动实际的行,而不是在同一行中上下移动。
如何才能仅在正常视觉模式下使用此地图?
发布于 2014-08-13 22:51:23
不能让gj在V (line-wise visual)模式下工作。
假设它可以工作,那么当你在非常长的(折行的)行上执行gj时,vim将选择一行的一部分,也就是说,它不再是逐行可视模式。
逐行选择中选择的最小单位应该是一条线。
更新
我必须澄清,如果您在选定区域,gj中使用V,选择了一条长线,它会向上/向下移动您的光标。但是如果你想让gj另外选择一条“屏幕上的线路”,这是行不通的,这里的gj和j是一样的
update2
OP注释的变通方法(仅以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'发布于 2014-08-14 00:24:56
多亏了@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时,它都会取消映射和映射按键。
https://stackoverflow.com/questions/25289065
复制相似问题