列模式下的vim shift选择(不是文本)

时间:2016-12-15 16:06:49

标签: vim

假设我在可视模式下选择了一列文本并进行了相同的编辑。现在我想将选择(而不是文本)移动到下一列,以便我可以在第二列中编辑这些条目。我怎么能这样做。

详细

+------+-------+-------+ 
| line | A     | B     |
+------+-------+-------+
| 1    | 2     | 4     |
| 2    | 4     | 4     |
| 3    | 0     | 3     |
| 4    | 3     | 1     |
| 5    | 6     | 1     |
+------+-------+-------+

让我们假设我选择了A列的1,2,3行(即我选择了元素2,4,0)。我递增了这些数字。现在我想将选择移动到B列(即选择元素4,4,3)。现在我想减少B列中的选定元素

4 个答案:

答案 0 :(得分:2)

您正在寻找1v。这将重新创建相同模式(在您的示例中为 blockwise )和相同尺寸(宽度和高度,尽可能)的视觉选择,但从当前光标位置开始。但是,您需要对第一个选择应用更改!

因此,一旦您处理了第一列(例如通过<C-A>增加了它),只需转到下一个列(2wf4,...),并输入1v

答案 1 :(得分:1)

如果您使用选择2 4 0递增Ctrl-A,您仍然希望递增元素4 4 3,则不必移动选区。您只需将光标移至4列中的第一个B,然后按.(dot)即可重复上一个Ctrl-a。然后4 4 3将为5 5 4

更新

关于你的评论,似乎你想对“选择”做不同的操作。你可以这样做:

  • Ctrl-V选择专栏A2,4,0),做点什么
  • 将光标移至第B栏,第一行元素4,然后按1Ctrl-V

您应该看到4,4,3已被选中。所以诀窍是[count]ctrl-v,我们按1作为计数,vim会选择与光标起点上最后一个选择相同的行数。请阅读:h ctrl-v了解详情。

答案 2 :(得分:1)

大多数现代编辑器都有一个名为“多个游标”的功能,它听起来像是多个游标,可以使用相同的按键同时编辑多个位置。这是一个高效,直观的功能,可以完成这样的任务。默认情况下,在Vim中没有办法做到这一点,相反,你必须低效地将动作,计数和命令粘合在一起,以试图达到你想要的效果。

幸运的是,有一个插件可以让我们有效地使用多个游标,vim-multiple-cursors。由于Vim接口的性质有限(就像它不可能有一个屏幕外的光标),它可能是相当错误的,但在这个例子中它的效果非常好。

enter image description here

此GIF的击键:

  • (从第1行开始,A栏)
  • CTRL v 视觉阻止模式
  • j j 将选择向下移动2行
  • CTRL n 输入多个游标模式。将每行上的可视块的开始变为功能最强大的Vim游标。
  • 每个光标位置
  • CTRL a 增量
  • w w 将每个光标移到2个字上(到b栏)
  • CTRL x 每个光标位置递减
  • ESC 退出多个光标模式。

多个游标是以行/列或任何其他格式编辑重复数据的快速直观方式。不幸的是,Vim永远无法匹配其他编辑器的多个游标的速度和效率,但这个插件对于这样的任务仍然非常有用。

答案 3 :(得分:0)

我的解决方案: :4,6norm 3w CTRL-V 按Ctrl-a 2w CTRL-V CTRL-X

:4,6 .......... interval where we will perform the change
norm .......... normal mode
3w ............ jump to the seccond column
Ctrl-v ........ used to insert literal key combinations
Ctrl-a ........ increase number
2w ............ jump to the next column
Ctrl-v ........ again literal combination stuff
Ctrl-x ........ decrease number