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

Posted

技术标签:

【中文标题】Vim:在可视模式下选择文本块的更快方法【英文标题】:Vim: faster way to select blocks of text in visual mode 【发布时间】:2011-11-16 10:37:28 【问题描述】:

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

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

【问题讨论】:

+1 好问题,因为我发现自己经常做这样的事情。我想知道这是否不是开始使用 v%v/pattern 或其他东西的地方? vip 选择内段 vis 选择内句。 V35G 将直观地从当前行选择到第 35 行,V10jV10k 将直观地选择下一个或上一个 10 行 @Stephan,这正是我想要的。谢谢!! 对于行选择,我使用快捷方式:nnoremap <Space> V。在可视行模式下,只需用鼠标右键单击即可定义选择(至少在 linux 上是这样)。总之,比只用键盘更有效。 【参考方案1】:

除了其他人所说的,您还可以使用模式搜索来扩展您的选择。

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

更新

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

【讨论】:

如果你需要包含你可以使用v/foo/e的模式。 e 代表匹配模式的“结束”。 您可以从该行修改偏移量:V/foo/+5 或 V/foo/-5(我正在使用与作者一样的 linewise 视觉模式)。 如果您想选择与您的搜索匹配的文本范围,您会怎么做;即:查找并选择(整个单词)您的搜索词? @DanielPark 要选择当前单词,请使用v i w。如果要选择当前连续的非空白,请使用v i Shift+w。不同之处在于插入符号在这里MyCla|ss.Method,第一个组合将选择MyClass,第二个将选择整个东西。 谢谢。发现同样使用v i w s可以让你有效地进行“替换”操作。【参考方案2】:
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 实现你想要的

【讨论】:

【参考方案3】:

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

V100G
V100gg

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

文本对象是强大的地方。他们引入了更多带有介词的宾语。

Vap

意思是“围绕当前段落选择”,即选择当前段落及其后面的空行。

V2ap

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

V-2ap

这意味着“转到当前段落的末尾,然后直观地选择它和前一段。”

将 Vim 理解为一门语言将帮助您充分利用它。

选择down后,可以结合其他命令:

Vapd

使用上述命令,您可以选择段落周围并将其删除。将d 更改为y 进行复制或更改为c 进行更改或更改为p 进行粘贴。

一旦您掌握了所有这些命令如何协同工作的窍门,那么您最终将不需要在视觉上选择任何东西。您可以使用dap 命令删除该段落,而不是直观地选择然后删除一个段落。

【讨论】:

V-2ap 使用 -2 真的很聪明。【参考方案4】:

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

v 将您置于选择模式,35 指定您要 G 转到的行号。

您也可以使用v,它将选择直到下一段开头的所有内容。

【讨论】:

作为 v 的替代品 我通常更喜欢 vip(我记得通过记忆辅助“非常重要的段落”)【参考方案5】:

用于选择行数:

shift+v 9j - 选择 10 行

【讨论】:

对于小范围这很好,尤其是与:set rnu配对时【参考方案6】:

Shift+V n jShift+V n k

这将选择当前行和下一个/上一个n 行。我觉得它很有用。

【讨论】:

这是我一直在寻找的一种简单方法。谢谢【参考方案7】:

简单只需按Shift v 行号 gg

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

【讨论】:

【参考方案8】:

v 35 j

添加最少 30 个字符的文本

【讨论】:

【参考方案9】:

v%

将选择整个区块。

一起玩:

vvpvs

查看帮助:

:help text-objects

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

【讨论】:

【参考方案10】:

您可以按vi 选择光标当前所在的被 括号包围的块。

你在那个街区的哪个位置并不重要(只要确保你在最外面的那个)。您也可以将 更改为具有)] 之类的任何对象。

【讨论】:

【参考方案11】:

文本对象:http://vim.wikia.com/wiki/Creating_new_text_objects

http://vimdoc.sourceforge.net/htmldoc/motion.html#text-objects

【讨论】:

【参考方案12】:

你总是可以只使用先行数字来重复动作:

在可视模式下,键入 35↓ 光标将向下移动 35 次,选择接下来的 35 行 在正常模式下: 删除35行35dd 粘贴35次35p 撤消 35 次更改 35u

【讨论】:

【参考方案13】:

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

【讨论】:

【参考方案14】:

知道它可能会派上用场:

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

今天我看到了来自here的惊人提示:

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

您也可以这样做重置可视块边界:

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

【讨论】:

【参考方案15】:

在视觉中选择所有: 键入 Esc 以确保您处于正常模式

:0 

输入 ENTER 转到文件开头

vG

【讨论】:

您也可以在普通模式下使用gg 转到第一行。【参考方案16】:

我在缩进模式下使用折叠:

v 在块的任意位置打开可视模式

zaza翻两下

【讨论】:

以上是关于Vim:在可视模式下选择文本块的更快方法的主要内容,如果未能解决你的问题,请参考以下文章

vim copy / yank而不离开可视模式

Vim - 在可视模式下复制/粘贴时保留上次复制的文本

10-vim-选中命令-01-三种选择文本的方式

vim 详解

linux vim visual模式下的编辑。

vim技巧