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 行,V10j
或 V10k
将直观地选择下一个或上一个 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 j
或 Shift+V n k
这将选择当前行和下一个/上一个n
行。我觉得它很有用。
【讨论】:
这是我一直在寻找的一种简单方法。谢谢【参考方案7】:简单只需按Shift v 行号 gg
示例:您的当前行到第 41 行 只需按 Shift v 41 gg
【讨论】:
【参考方案8】:v 35 j
添加最少 30 个字符的文本
【讨论】:
【参考方案9】:v%
将选择整个区块。
一起玩:
v
、vp
、vs
等
查看帮助:
: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:在可视模式下选择文本块的更快方法的主要内容,如果未能解决你的问题,请参考以下文章