我将列号设置为相对模式,因为我喜欢不计数。
我还将 nnoremap
ped j
到 gj
,以便更轻松地使用换行。问题是,当我在包裹的线上做一个 Action (例如 2j
)时,它不会将我向上移动两行,而是向上移动两“行”。
为了解决这个问题,我希望将 j
映射到 gj
进行常规移动,但在给定时表现得像常规 j
计数
。我在我的 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
,但在给定计数时却像正常情况一样工作?
最佳答案
您可以使用v:count
来获取给定的当前计数。如果未提供任何内容,则将其设置为零。
nnoremap <expr> j v:count == 0 ? 'gj' : 'j'
更多帮助请参见:
:h v:count
:h :map-<expr>
关于Vim - 根据上下文映射备用键行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37196077/