假设我有以下文本:

aaa-dd-e:“ aaa”,
c-9:“ c”

我要选择以下内容:

aaa-dd-e:“ aaa”,bb-x:“ bb”,c-9:“ c”

我尝试使用cv创建一个可视块,但是在第一列上创建选择并按“ f:”(我的意思是将选择扩展到上面的每一行上的冒号之后),得到的是:

aaa- dd-e:“ aaa”,bb-x:“ bb”,c-9:“ c”

选择在第一个冒号处停止并创建一个矩形。

评论

您希望通过该选择实现什么,可能还有另一种方式

如果以字符分隔,则可以尝试先重新对齐块,然后再选择它。请参阅:仅在VIM中的第一个分隔符上对齐文本

#1 楼

选择通常是达到目的的手段,在Vim中通常更是如此,在这种情况下,通常首先不需要选择。

假设您仍然希望在非JSON文件中的属性名称周围加上引号,将其转换为正确的JSON:


选择要修改的行,无论是按字符还是按行,都没关系,

:'<,'>norm I"^[f:i"'<,'>自动如果您有漂亮的环绕声插件,则步骤2变为:

:'<,'>norm ^vt:S"


替代,步骤2可能变为:

:'<,'>s/^\s*\([^:]*\):/""


评论


你们是对的,我现在发现视觉选择可能没有必要。在帮助或:g / regex / norm的帮助下,我可以轻松实现自己想做的任何事情。

–沉亚龙
17年9月1日在1:29

有什么办法可以将整个选定的块放入系统剪贴板并粘贴到另一个文件中?

–沉亚龙
17年9月1日,下午1:31

当然。假设您的Vim是使用剪贴板支持编译的,则可以执行“ + y”或“ * y”,具体取决于要定位的剪贴板。这里有很多相关的问题。

– romainl
17年9月1日在5:29

#2 楼

Vim仅支持矩形按块选择,但按$时锯齿状的右边框除外。

有一些插件(如vim多个光标)可以模拟多个选择,但您也应该能够使用纯Vim命令,例如:global:substitute(如果您可以制定与每一行中的选择相匹配的正则表达式),或者通过重复宏(如果有特定的动作),可以实现您的实际目标(不幸的是您没有提到)涵盖了每一行中的选择)。

评论


如果我想剪切这些行并粘贴到另一个缓冲区中怎么办?

–沉亚龙
17年8月31日在13:46

#3 楼

只是要戴上帽子,如果您真的想使用视觉选择,则可以使用Tabular插件排列冒号,然后进行视觉选择。

如果您使用原始文字:

aaa-dd-e: "aaa",
bb-x: "bb",
c-9: "c"


:Tab /:\zs将对齐结肠后的所有内容,如下所示

aaa-dd-e:  "aaa",
bb-x:      "bb",
c-9:       "c"


然后您就可以视觉块选择。

正如其他人所说,在这种情况下,视觉选择可能不是必需的。使用norm或替换可能可以完成您想要的操作,而不必大惊小怪。

#4 楼

我已经找到了解决这个问题的方法,它非常简单!
从要复制的文本的底部开始选择可视块模式,然后向上选择!当您向上移动时,它会扩展该块,而如果向下突出显示,则会使选择范围缩小。

评论


但是这样一来,它将永远是一个矩形块,对吗?在我阅读本文时,这不是OP想要的(他们提到他们尝试了可视块模式)。

–马丁·图尔诺伊(Martin Tournoij)
18年6月14日在19:06

否。如果所有线的长度相同,它将始终是一个矩形块。我发现从底部开始并向上突出显示,然后按$转到行的末尾将导致所有突出显示的行都突出显示到该行的末尾。

– Arthur Bowers
18年6月18日在8:04