Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vim中何时使用视觉模式?_Vim_Text Editor - Fatal编程技术网

Vim中何时使用视觉模式?

Vim中何时使用视觉模式?,vim,text-editor,Vim,Text Editor,我对Vim的世界比较陌生。我一直在学习如何解决这个问题,但还没有找到进入视觉模式的实际目的 当视觉模式特别有用时,有哪些场景 是否有只能在可视模式内执行的操作?当我想突出显示文本的某一部分时,我使用可视模式。我首先在标准模式下键入v,然后启用视觉模式。然后我使用箭头键移动光标。这将使我的起点和当前光标位置之间的文本高亮显示。选择这样的文本部分后,在命令模式下输入命令(例如搜索/替换)(通过键入:)只会影响所选区域 另一个有用的可视命令是shift+v(可视线)。这与上面的操作相同,但它一次选择整

我对Vim的世界比较陌生。我一直在学习如何解决这个问题,但还没有找到进入视觉模式的实际目的

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


是否有只能在可视模式内执行的操作?

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

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

  • 当您想注释一块文本时
    在命令模式下:
    移位+v ,ctrl+v, j或k, 我,#(评论) 字符),然后Esc

    Vim将注释字符插入到 街区的起点

  • 当我使用时,我发现复制数据要容易得多 通过视觉模式转到剪贴板。
    在命令模式下:
    移位+v ,j或k, " , + ,y

    这是剪贴板 登记册

    这对我来说比使用记号笔更清晰

  • 用于手动缩进

    Shift+v,
    Shift+>用于 向右移动。
    如果要将命令应用于不易被描述为基本移动命令的文本部分,Shift+视觉模式非常有用。您可以在视觉模式下选择一些具有复杂移动序列的文本,然后将命令应用于该选择。

    除此之外(很好)答案是,这是定义操作范围的简单方法。例如,将搜索和替换限制为特定方法

    假设您有以下代码:

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

    您可以将光标放在任何大括号或圆括号上,然后按v、%、:、s/abc/xyz/g,您的搜索和替换操作将在一个定义的范围内执行。

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

    一旦你意识到这种模式,你可以很容易地删除缩进、注释等。根据我的经验,这通常比找出如何形成一个等价的搜索和删除语句要快


    您还可以通过选择一块文本并按I键,键入任何您想添加的内容,然后按Esc键(注意:您可能需要重新绘制屏幕(例如,通过移动光标)来添加缩进(或Cherian所述的注释),以查看其效果).

    视觉模式的一个优点是,由于Vim专注于模态,您可以执行大多数常用命令(例如搜索/替换为:s、d删除文本,或r替换文本)同时也能准确地看到什么会受到影响——这让你能够确定你正在做的事情的确切范围

    此外,如其他人所述,通过在可视块模式(ctrl+v)中选择每行的第一个字符,您可以轻松插入前缀(例如注释字符或对齐的
    &
    ,或LaTeX中的
    \item
    ),按I键在第一个字符前插入,键入任何要插入的字符,然后切换回正常模式


    最后一种视觉模式是VisualLine(Shift+v),它允许您快速选择一些线条。从那里,您可以使用>或更改它们的缩进。我没有看到下面提到的内容,可能是因为它们很微妙

    1-减少与未命名寄存器的麻烦 每当您复制(拖动)一些文本,然后想将其他文本更改为“删除内部单词”,Vim就会将删除的文本放入未命名的寄存器。如果您尝试粘贴,它只会将删除的文本粘贴回,除非您从0寄存器粘贴
    “0p

    但是使用
    visual
    模式,您只需执行类似
    viwp
    的操作,而不必弄乱寄存器

    因此,为了进行比较,在一些参数中复制和替换:

    yiw
    ->移动到某处->
    vi(p

    vs

    yiw
    ->move->
    ci(0p

    yiw
    ->move->
    “\u di(p

    yiw
    ->move->
    di(“0P

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

    2-跳转到文本对象的部分
    如果要跳转到文本对象的开头或结尾,可以在
    visual
    模式下选择它,然后按o,
    va"
    选择引号内的任意位置,然后按o键跳转到匹配的引号,类似于%表示匹配的括号。

    @Cherian使用按钮图像进行键盘输入的伟大技术。这是什么标记?我不理解第一个示例,我想它演示了如何在blo开头插入单个字符ck,但我不明白为什么视觉模式在插入单个字符时有用,而您只需在其中导航并键入单个字符。我希望看到字符插入到每行的开头。如果我误解了,哪种操作/按键专门用于每行?另一个(有时)方便的命令是ctrl-shift-v以使用可视块模式,在该模式下,您可以选择方形的文本,而不仅仅是按行。我发现对于log files.FWIW来说很方便,要进入列选择(“方形”)选择模式,您只需要ctrl-v(Vim很遗憾无法区分ctrl-foo和ctrl-shift foo之间的区别)。关于“确切地看受影响的是什么”:Vim的几个函数(我知道:s和:g是这样的)总是在整条线路上工作,即使只选择了线路的一部分。我还没有弄清楚