Vim:在可视模式下选择文本块的更快方法


189

我使用vim已经有一段时间了,我知道在可视模式下选择文本块就像SHIFT+ 一样简单,V然后逐行向上或向下移动箭头键,直到到达文本块的末尾为止。要选择。

我的问题是-在可视模式下,是否有更快的方法来选择文本块,例如通过SHIFT+ V然后指定要停止选择的行号?(:35例如,在这里35是我要选择的行号-这显然行不通,因此我的问题是查找是否可以完成与此类似的操作...)


3
+1好问题,因为我发现自己经常做这样的事情。我想知道如果这或许不是地方开始使用使用v%v/pattern或其他什么东西?
user786653 2011年

9
vip选择内部段落与选择内部句子。
SergioAraujo 2011年

27
V35G将在视觉上从当前行选择到35行,V10j或者也V10k将在视觉上选择下一行或前10行
Stephan

1
@Stephan,那正是我想要的。谢谢!!
shriek

对于行选择,我使用快捷方式:nnoremap <Space> V。在可视行模式下,只需用鼠标右键单击以定义选择(至少在Linux上是这样)。无论如何,比仅使用键盘更有效。
Mikhail V

Answers:


211

除了别人说的话,您还可以使用模式搜索来扩展选择范围。

例如,v/foo将从您当前的位置中选择下一个“ foo”实例。例如,如果您实际上想扩展到“ foo” 的下一个实例,则在第35行,只需按n将选择扩展到下一个实例,依此类推。

更新

我并不经常这样做,但是我知道有些人广泛使用标记来进行视觉选择。例如,如果我在第5行上并且想要选择第35 行,则可以按ma将标记a放在第5行上,然后:35移至第35行。Shift+ v进入逐行可视模式,最后`a选择返回以标记a


21
如果需要包括模式,可以使用v/foo/e。该e代表匹配模式的“结束”。
彼得·林克

6
您可以从该行修改偏移量:V / foo / + 5或V / foo / -5(我正在使用像作者一样的逐行可视模式)。
bheeshmar 2011年

如果要选择与搜索匹配的文本范围,该怎么办;即:查找并选择(整个词)您的搜索词?
丹尼尔·帕克

5
@DanielPark要选择当前单词,请使用v i w。如果要选择当前连续的非空白,请使用v i Shift+ w。区别在于插入符号在此处时MyCla|ss.Method,第一个组合将选择MyClass,第二个组合将选择整个事物。
杰伊,

1
谢谢。发现使用还可以v i w s使您有效地执行“替换”操作。
丹尼尔公园

113
G                       Goto line [count], default last line, on the first
                        non-blank character linewise.  If 'startofline' not
                        set, keep the same column.
                        G is a one of jump-motions.

V35G实现您想要的


89

Vim是一种语言。要真正了解Vim,您必须了解该语言。许多命令是动词,而vim也有宾语和介词。

V100G
V100gg

这意味着“选择当前行直到并包括第100行。”

文本对象是强大的地方。他们用介词引入更多对象。

Vap

这意味着“在当前段落周围选择”,即选择当前段落及其后的空白行。

V2ap

这意味着“在当前段落和下一个段落周围选择”。

}V-2ap

这意味着“转到当前段落的末尾,然后在视觉上选择它和上一个段落”。

将Vim理解为一种语言将帮助您从中获得最大收益。

选择结束后,可以与其他命令结合使用:

Vapd

使用以上命令,您可以选择一个段落并将其删除。更改dy复制或到c改变或一个p粘贴过来。

一旦掌握了所有这些命令的协同工作原理,那么最终将不需要在视觉上进行选择。您可以直接使用dap命令删除该段落,而不必从视觉上选择然后删除一个段落。


} V-2ap使用-2确实很明智。
Ambareesh

40

v35G 将选择从光标到第35行的所有内容。

v使您进入选择模式,35指定要G转到的行号。

您还可以使用v}它将选择直到下一段开始的所有内容。



9

Shift+V n j 要么 Shift+V n k

这将选择当前行以及下一n行/上一行。我觉得这很有用。


这是我一直在寻找的简单方法。谢谢
Arsal


6

v%

将选择整个块。

也可以玩:

v}vpvs,等。

查看帮助:

:help text-objects

其中列出了选择字母,单词,句子,段落,块等的不同方法。



4

您可以按vi}选择{}光标当前所在位置的方括号内的块。

您在该块中的什么位置并不重要(只需确保您位于最外层)。同样,您也可以更改{为一对像)或的任何东西]


3

您总是可以使用前一个数字重复操作:

  • 在可视模式下,键入35,光标将向下移动35次,然后选择下35行
  • 在正常模式下:
    • 删除35行 35dd
    • 粘贴35次 35p
    • 撤消35个更改 35u
    • 等等

2

简单只需按 Shift v line number gg

示例:您当前的行到第41行只需按 Shift v 41 gg


1

}表示将光标移到下一段。因此,用于v}选择整个段落。


0

要以视觉方式选择全部内容,请执行以下操作:键入Esc以确保您处于正常模式

:0 

键入ENTER转到文件的开头

vG

您也可以gg在正常模式下使用以转到第一行。
huangzhaohao

0

它可能会派上用场:

为了例如选择相同数量的行,1v 您应该进行一些修改才能使用1v(逐行或逐行)。

今天,我从这里看到了这个惊人的提示:

 :5mark < | 10mark > | normal gvV
 :5mark < | 10mark > | normal gv

您还可以通过以下方式重置可视块边界:

m< .......... sets the visual mode start point
m> .......... sets the visual mode end point

0

我在缩进模式下使用fold:

v 在块上的任何地方打开可视模式

zaza 拨动它两次

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.