我将列号设置为相对模式,因为我不喜欢。
我还有nnoremap
ped j
到gj
,因此使用换行符更容易。问题是,当我在一条被包裹的线上做一个动作(比如2j
)时,它不会向上移动两行,而是两条“线”。
为了解决这个问题,我希望j
映射到gj
进行常规移动,但在给定j
时就像常规count
一样。我在vimrc
中尝试了以下命令:
" Up and down now don't skip line-wraps unless given count
fun! MoveLines( lines, type )
if ( a:lines == 1 )
let a:str = 'g' . a:type
else
let a:str = a:lines . a:type
endif
call feedkeys( a:str )
endfun
nnoremap <silent> j :<C-U>call MoveLines( v:count1, 'j' )<CR>
当我按j
时,此功能正常。问题是当我尝试给它一个计数时:它会递归地调用它自己(正如预期的那样)。我可以尝试使用cursor
,但是可以不这样做吗?
如果没有给出计数,我如何有条件地将j
映射为gj
,但在给出计数时却表现正常?
答案 0 :(得分:3)
您可以使用v:count
来获取当前计数。如果没有提供任何内容,则将其设置为零。
nnoremap <expr> j v:count == 0 ? 'gj' : 'j'
如需更多帮助,请参阅:
:h v:count
:h :map-<expr>