防止使用 B 或 b 跳转到 vim 中的上一行

Prevent using B or b from jumping to previous line in vim

我在 SO 上找到了以下代码,它非常适合使用 E 跳转到单词并在行尾停止,如下所示:nnoremap <expr> E getline('.')[col('.') - 1:] =~# '\s\S' ? 'E' : (col('.') + 1 == col('g_') ? 'E' : '$').
但我最近才开始涉足 vimscripts,但无法让它与 b/B 一起倒退。 我试图做这样的事情但没有成功,因为它不会在行的开头停止:

nnoremap <expr> B getline('.')[col('.') + 1:] =~# '\S\s' ? 'B' : (col('.') - 1 == col('^') ? 'B' : '^')

我建议如下:

nnoremap <expr> B strpart(getline('.'), 0, col('.') - 1) =~ '^\s*$' ? '0' : 'B'

strpart(getline('.'), 0, col('.') - 1) 选取当前光标位置左侧的子字符串。如果这是空的或仅由空格组成(即,当 B 通常跳转到上一行时),则 B 映射到 0,即转到第一个字符行而不跳转到上一行。否则,B 的行为类似于原始 B