Vim:在可视块模式下快速选择文本的矩形块

Vim:在可视块模式下快速选择文本的矩形块,vim,Vim,我正在寻找一种在视觉块模式下快速选择文本块的方法。我处理这种性质的文件: aaaa bbbb cccc aaaa bbbb cccc aaaa bbbb cccc dddd Xeee ffff dddd eeee ffff dddd eeee ffff gggg hhhh iiii gggg hhhh iiii gggg hhhh iiii 我的目标是在视觉块模式中选择中间块。我会: 导航到X所在的拐角处 粘贴 “e”将选择扩展到块的末尾 “jj”或“2j”将选择向下延伸到块的底部。 我正

我正在寻找一种在视觉块模式下快速选择文本块的方法。我处理这种性质的文件:

aaaa bbbb cccc
aaaa bbbb cccc
aaaa bbbb cccc

dddd Xeee ffff
dddd eeee ffff
dddd eeee ffff

gggg hhhh iiii
gggg hhhh iiii
gggg hhhh iiii
我的目标是在视觉块模式中选择中间块。我会:

导航到X所在的拐角处 粘贴 “e”将选择扩展到块的末尾 “jj”或“2j”将选择向下延伸到块的底部。 我正在寻找一个替代4,类似于“e”,将移动到块的最后一行。在这个简单的例子中,“jj”不是很不方便,但有时它们是大的块

有一个类似的问题,但这涉及到跳过预先确定的行数。有没有办法做到这一点,再次模拟“e”,但移动行而不是列?谢谢

从X开始,您可以使用}kee执行此操作:

–启动分块视觉模式 }–请转到本段末尾,该动议被认为提供了这个相当复杂的组合的好处 k–上面的一个用于排除空行 ee–将光标从第一列移动到内部块的末尾。 用v启动可视模式。然后选择带ip的内部段落。使用进入视觉块模式。现在只需根据需要使用es转到块的末尾


从块的右下角开始是一样的,但是使用w代替e。

我尝试在光标周围创建一个函数select Visual block,这很有趣

function! ContiguousVBlock()
  let [lnum, vcol] = [line('.'), virtcol('.')]
  let [top, bottom] = [lnum, lnum]
  while matchstr(getline(top-1), '\%'.vcol.'v.') =~# '\S'
    let top -= 1
  endwhile
  while matchstr(getline(bottom+1), '\%'.vcol.'v.') =~# '\S'
    let bottom += 1
  endwhile

  let lines = getline(top, bottom)
  let [left, right] = [vcol, vcol]
  while len(filter(map(copy(lines), 'matchstr(v:val,"\\%".(left-1)."v.")'),'v:val=~#"\\S"')) == len(lines)
    let left -= 1
  endwhile
  while len(filter(map(copy(lines), 'matchstr(v:val,"\\%".(right+1)."v.")'),'v:val=~#"\\S"')) == len(lines)
    let right += 1
  endwhile

  call setpos('.', [0, top, strlen(matchstr(lines[0], '^.*\%'.left.'v.')), 0])
  execute "normal! \<C-V>"
  call setpos('.', [0, bottom, strlen(matchstr(lines[-1], '^.*\%'.right.'v.')), 0])
endfunction
nnoremap <Leader>vb :<C-U>call ContiguousVBlock()<CR>
可以用vb试试:它应该选择光标周围任何连续的非空白矩形块。首选垂直轴

也许我以后会改进它,但现在你可以试试,如果你喜欢的话,它能解决你的问题


作为我自己尝试的另一种选择,你可以尝试流行的插件。它让您可以选择一列或多列文字。

我认为使用标记不会太不方便…+1 textobj word column确实可以让这类事情变得漂亮simple@PeterRincker真正地我总是觉得推荐textobj word专栏很糟糕,因为它对我来说从来都不起作用。。。这是一个“请你做什么”的插件,它似乎从来都不理解我的意思。我最终摆脱了它。我同意“请按我的意思做”插件位。这可能令人沮丧。在明显的情况下,它工作得很好。我相信这是真的。我个人制作了一个叉子,它利用周围的边界来帮助减少它的渴望。然而,我不确定它是否准备好进入黄金时段。我真的应该把它放到Github上,非常感谢您花时间编写这个漂亮的函数。事实上,textobj word专栏插件非常适合我的需要,具有更大的灵活性。