从传统移动到Vim移动(<;左>;<;右>;<;上>;<;下>;<;退格>;)

从传统移动到Vim移动(<;左>;<;右>;<;上>;<;下>;<;退格>;),vim,Vim,我不想和我的编辑打高尔夫球。我只是想用vim来提高我的编辑技巧 让我们考虑一下这个组件,我想把它转换成C.,以便有条不紊地完成它,我想一个接一个地做一些小的改变。 dm(__abcd_bar_id + axis) = f4; f1 = dm(_abcd_foo_id + axis); f5 = f4 - f1; 此示例中的作业是: 使用abcd\u bar\u id[axis]=f4简化第一行 使用f1=abcd\u foo\u id[axis] 将第三行中的f1替换为

我不想和我的编辑打高尔夫球。我只是想用vim来提高我的编辑技巧

让我们考虑一下这个组件,我想把它转换成C.,以便有条不紊地完成它,我想一个接一个地做一些小的改变。

    dm(__abcd_bar_id + axis) = f4;
    f1 = dm(_abcd_foo_id + axis);
    f5 = f4 - f1;
此示例中的作业是:

  • 使用
    abcd\u bar\u id[axis]=f4简化第一行
  • 使用
    f1=abcd\u foo\u id[axis]
  • 将第三行中的f1替换为第二行
  • 删除第二行
  • 这些步骤是不可谈判的。我知道我可以很容易地用下面的正则表达式摆脱所有的
    dm(\uu variable+index)
    ,但这是离题的

    :%s/dm\s*(\s*_\+\(\w\+\)\s\++\s\+\(\w\+\)\s*)/\1[\2]/g
    
    因此,为了实现这些变化,我通常会这样做:

    ▶▶▶▶德尔德尔德尔▶▶▶▶▶▶▶▶▶▶▶▶[DelDelDel▶▶▶▶对] ▼DeleteDelDel[▶▶▶▶]德尔 家▶▶▶▶右德尔德尔 班次+结束班次+◀ Ctrl+c ▼终点◀◀退格退格Ctrl+v

    结果应该是:

    abcd_bar_id[axis] = f4;        
    f5 = f4 - abcd_foo_id[axis];
    
    救我一命的是,我很快就能多次按同一个键。不过,我相信,如果我使用vi功能,我的工作效率会更高

    vfahd
    wh3lxi[wr] j:%s/dm(u//Enter f+hv2lxi[Escwr] $hvF2ay jf1hhplxxx

    在我看来,这对我的大脑来说要复杂得多,因为每次击键前都需要一段预处理时间

    例如,如果我想移动到
    f1
    ,如果在前往
    f1
    的路上没有其他
    1
    ,我需要用眼睛进行解析

    我真的觉得我需要多年的训练才能“流利”地使用vim

    因此,问题是:

    • vim大师将如何看待这个例子
    • 维姆大师存在吗

    • 我当然不认为自己是VIM大师,虽然我每天都在使用它。首先回答你的第二个问题,也许有人可以被当作一个大师,在VIM中有这么多的选择和可能性,每个人都可以有自己的做事方式。此外,因为你可以根据你的需要量身定制VIM。,很容易简化常规任务,而且这些配置可能会有很大不同。此外,被我视为大师的人(比如说)声称,关于vim还有很多需要学习的地方,因此成为大师肯定需要几年的时间

      但是不要气馁,只需要一些练习就可以开始以vim的方式思考,您的编辑任务将变得更加容易:)

      回到您的示例。首先,我将以略少的按键次数编辑第一行:

      差热分析

      f) r]

      bdTd

      我[

      就击键次数而言,差异并不大,但它说明了不同的方法。在我看来,它允许更少的预处理,这是您强调的问题。我将这些击键分为几个部分,向您展示我的思考过程:

      • 删除至a

      • 查找)并将其替换为]

      • 后退一个单词并删除直到(向后)d

      • 插入[

      当我应用这些更改时,我不需要考虑太多。你可能会认为这是违反直觉的,我首先跳到了
      字符,但对我来说,找到结束括号要比数数单词或数字容易得多 多次按h或l。当然,你可能知道这些按键,但当你编辑一些东西时,你并不总是记住所有的按键。这需要练习并强迫自己使用其中的一些(如t/t) 把它们牢牢地放在你的手指下。另外,试着用每把钥匙打印一张备忘单,直到你把它背下来。这不会花很长时间;)

      正如William在评论中所建议的,我在这里也会考虑macro。它是一个功能强大且易于使用的工具,可以真正自动化您的更改。 我已经知道如何编辑第一行。在你的例子中,我知道在第二步中我会做同样的事情,但是在稍微不同的位置,所以我不编辑第一行,而是立即录制一个宏,但我必须使其通用 为了便于应用。因此,在进行任何更改之前,我考虑先将光标放在适当的位置。我的宏如下所示:

      qq

      0fd dta f)r]bdTd i[

      q

      请注意,我在开始时添加了3次击键(不包括qq,qq开始将宏记录到q寄存器)。这在第一行中看起来可能是多余的,但它确保在进行任何更改之前光标的正确位置。 这样我就可以在第二行用@q轻松地应用这个宏

      现在,您必须在第三行中替换此
      f1
      。您的光标仍在第二行中,因此您只需使用以下命令拖动: 0fay$

      然后将其粘贴到第三行: j$bPlD

      当您只编辑3行代码时,使用宏mith看起来像是一件多余的事情,但是当您习惯于以vim方式进行更改时,您会真正感觉到您正在利用它的强大功能

      记住录制的宏并不难,你必须有正确的态度。首先,你将宏录制到寄存器中,因此键入
      :registers
      也会显示你的宏。其次,你可以编辑它们, 通过粘贴特定的寄存器,修改它,然后保存到同一个寄存器。然后您可以使用
      @[register\u letter]
      播放它。最后,不要附加到特定的宏。保存一个或两个,使用它们随时进行多个更改 一次,忘记它们。然后在同一个字母下记录另一个。例如,如果你意识到你必须对整个文件进行重复更改,请使用
      qq
      ,因为它快速直观。在进行更改后,你很少 需要重新播放同一个宏,因为整个缓冲区已经处于正确的状态。但如果您知道需要它,请在ano下录制下一个宏