什么时候在Vim中使用可视模式?

时间:2010-01-28 03:37:00

标签: vim text-editor

我对Vim的世界相对较新。我一直在学习它,但尚未找到进入视觉模式的实际目的。

当视觉模式特别有用时,有哪些场景?

是否只能在可视模式下执行操作?

7 个答案:

答案 0 :(得分:7)

当我想要突出显示一段文字时,我使用视觉模式。我首先在标准模式下键入 v ,然后启用可视模式。然后我用箭头键移动光标。这会导致我的起点和当前光标位置之间的文本突出显示。一旦选择了这样的文本部分,在命令模式下输入命令(例如搜索/替换)(通过键入)将只影响所选区域。

另一个有用的视觉命令是 shift + v (视线)。这与上面相同,但它一次选择整行而不是单个字符。

答案 1 :(得分:4)

  1. 如果您想 评论一段文字
    在命令模式下:
    Shift + v ctrl + v j k (评论 字符)然后 Esc

    Vim将注释字符插入 块的开始..

  2. 当我使用Gvim时,我发现 复制数据要容易得多 通过视觉模式到剪贴板 在命令模式下:
    Shift + v j k + y

    这里 + 是剪贴板 注册

    对我来说,使用标记

  3. 更加清晰
  4. 适用于 手动缩进

    Shift + v
    Shift + > for 向右移动。 Shift + < for 向左移动。 重复

  5. 这很有趣:-)

答案 2 :(得分:3)

视觉模式的一个好处是,由于Vim专注于模态,你可以执行你习惯的大部分命令(例如用:s 搜索/替换, d 删除文本,或 r 替换文本),同时还能确切地看到将受到影响的内容 - 这可以让您确定正在进行的操作的确切范围。

此外,正如其他人提到的那样,您可以通过选择每行的第一个字符轻松插入前缀(如评论字符,或者说,&用于对齐或在LaTeX中\item visual block 模式( ctrl + v ),按 I 在第一个字符前插入,输入任何你的内容想插入,然后 Esc 回到正常模式。

最后一种视觉模式是视线 Shift + v ),它允许您快速选择多行。从那里,您可以使用> < 更改缩进(使用数字前缀,以便通过那么多标签缩进),使用 d y 删除或复制这些行,使用 zf 从这些行创建新的折叠,或使用任何其他基于选择的命令。

最后,你可以用视觉模式做很多其他很酷的事情,包括 gv 来重新选择你最后的视觉[line / block]模式选择, gU 将视觉选择转换为大写或将 gu 转换为小写等等。

答案 3 :(得分:2)

除了其他(好的)答案之外,这是一种定义动作范围的简单方法。例如,限制搜索&取代特定的方法...

说你有这段代码:

function foo() {
    abc();
    while (1) {
        def();
        abc();
    }
}

您可以将光标放在任何大括号或括号上,然后按 v s / abc / xyz / g 和您的搜索& replace将具有定义的操作范围。

答案 4 :(得分:1)

如果要将命令应用于不容易描述为原始移动命令的文本部分,则可视模式很有用。您可以使用复杂的移动序列在可视模式下选择一些文本,然后将命令应用于该选择。

答案 5 :(得分:0)

我经常发现自己使用视觉块模式( Ctrl + v )比任何其他视觉模式更多。

一旦了解此模式,您就可以轻松删除缩进,注释等。根据我的经验,这通常比确定如何形成等效的搜索和删除语句更快。

你也可以通过选择一个文本块并按 I ,键入要添加的内容,然后按添加缩进(或者像Cherian所述的评论) > Esc (注意:您可能需要重绘屏幕(例如移动光标)以查看其效果)。

答案 6 :(得分:0)

我没有看到以下提到的内容,可能是因为它们很微妙。

1-使用未命名的寄存器可以减少麻烦

每当您复制(粘贴)一些文本,然后想要 d 来更改其他文本,例如将diw更改为“ delete inner word”时,Vim都会放置已删除的文本进入未命名的寄存器。然后,如果您尝试粘贴,它只会将删除的文本直接粘贴回去,除非您执行"0p从0寄存器粘贴。

但是在visual模式下,您可以执行类似viwp的操作,而不必弄乱寄存器。

因此,为了进行比较,请在某些括号内进行复制和替换:

yiw->移至某处-> vi(p

vs

yiw->移动-> ci(<C-r>0p

yiw->移动-> "_di(p

yiw->移动-> di("0P

注意:这也适用于删除文本并将其粘贴回文本对象上。参见here

2-跳至文本对象的各个部分

如果要跳到文本对象的开头或结尾,可以在visual模式下选择它,然后按 o For exampleva"选择引号内的任何位置,然后按 o 跳到匹配的引号,类似于表示匹配的括号。