在 vim 中,如何将光标向下(或向上)移动到同一列中包含非空白字符的第一行?
例如,在以下文本中:
item1
item2
item3
item4
item5
item6
Run Code Online (Sandbox Code Playgroud)
如果光标在ein 上item1,将光标移到ein 上item4。
如果在min item3,移到min item5。
仅供参考,我正在寻找一种快速有效的方式来导航格式化文本。
(PS那些是空格而不是制表符。)
您可以使用以下映射来执行此操作。(可能有一些我没有想到的边缘情况)
nnoremap <leader>d m':exec '/\%' . col(".") . 'c\S'<CR>``n
nnoremap <leader>u m':exec '?\%' . col(".") . 'c\S'<CR>``n
Run Code Online (Sandbox Code Playgroud)
重要的部分是:exec '/\%' . col(".") . 'c'This 与当前列匹配。这是直接取自:h %c. 然后我添加了一个\S来匹配非空白。m'并``用于存储当前位置并在执行语句周围恢复它。这是必要的,因为使用执行将我们置于行的开头,这可能会导致不稳定的行为(在某些情况下跳过太多行)。执行此操作后,我将进入第一场比赛n。向上和向下版本之间的唯一区别是我们/向下和?向上搜索的方向。
如果您想使用虚拟列(即选项卡)来执行此操作,请替换\%c为\%v.