防止使用 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
。
我在 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
。