vim 移动到同一列中第一个非空白

vim 移动到同一列中第一个非空白

在 vim 中,如何将光标向下(或向上)移动到同一列中包含非空白字符的第一行?

例如,在以下文本中:

item1
    item2
    item3
item4
    item5
    item6

如果光标在ein上item1,则将光标移动到ein item4

如果在min item3,则移至min item5

仅供参考,我正在寻找一种快速有效的方法来浏览格式化的文本。

(PS:那些是空格而不是制表符。)

答案1

您可以使用以下映射来执行此操作。(可能有一些我没有想到的极端情况)

nnoremap <leader>d m':exec '/\%' . col(".") . 'c\S'<CR>``n
nnoremap <leader>u m':exec '?\%' . col(".") . 'c\S'<CR>``n

重要的部分是:exec '/\%' . col(".") . 'c'这与当前列匹配。这直接取自:h %c。然后我添加了一个\S以匹配非空格。m'``用于存储当前位置并在执行语句周围恢复它。这是必要的,因为使用执行将我们置于行的开头,这可能会导致不稳定的行为(在某些情况下跳过太多行)。执行此操作后,我转到第一个匹配项。向上和向下版本之间的唯一区别是我们搜索向下和向上的n方向。/?

如果您想使用虚拟列(即选项卡)来执行此操作,请替换\%c\%v

答案2

我的JumpToVerticalOccurrence 插件提供]|[|映射即可提供支持[count],且不会破坏当前的搜索模式。

答案3

如果您希望对具有定义缩进系统的代码或配置文件进行此操作(假设属于“格式化文本”), jeetsukumaran/vim-indentwise适用于跨缩进块的相对、绝对或块范围移动。

相关内容