我在SO上找到了以下代码,它非常适合使用E跳到单词并像这样停在行尾:nnoremap <expr> E getline('.')[col('.') - 1:] =~# 'sS' ? 'E' : (col('.') + 1 == col('g_') ? 'E' : '$')
但我最近才开始使用vimscripts,无法使用b/b进行反向操作。我试图做这样的事情,但没有成功,因为它没有停在线路的开头:
nnoremap <expr> B getline('.')[col('.') + 1:] =~# 'Ss' ? '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
类似。