向Vim移动传统移动(<left> <right> <up> <down> <backspace>)</backspace> </down> </up> </right> </left>

时间:2015-03-16 10:52:45

标签: vim

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

让我们考虑一下我想要转换为C的那个程序集。为了有条不紊地进行,我想逐行迭代地做一些小改动。

    dm(__abcd_bar_id + axis) = f4;
    f1 = dm(_abcd_foo_id + axis);
    f5 = f4 - f1;

这个例子的工作是:

  1. 使用abcd_bar_id[axis] = f4
  2. 简化第一行
  3. 使用f1 = abcd_foo_id[axis]
  4. 简化第二行
  5. 将第三行中的f1替换为第二行
  6. 删除第二行
  7. 这些步骤不可协商。我知道我可以很容易地删除所有dm(__variable + index)的正则表达式,如下所示,但这不是主题。

    :%s/dm\s*(\s*_\+\(\w\+\)\s\++\s\+\(\w\+\)\s*)/\1[\2]/g
    

    所以,为了实现这些变化,我传统上这样做:

    德尔 德尔 德尔 德尔 德尔 < KBD>▶ [ 德尔 德尔 德尔< / KBD> ] 删除 德尔 德尔 [ ] 德尔 主页 德尔 德尔 德尔 德尔 Shift + 结束 Shift + Ctrl + c 结束 Backspace Backspace 控制 + v

    结果应该是这样的:

    abcd_bar_id[axis] = f4;        
    f5 = f4 - abcd_foo_id[axis];
    

    拯救我的是我多次快速击中相同的键。但是,如果我使用vi功能,我相信我会更有效率

    v ˚F ħ d
    瓦特 ħ 3 X [ 瓦特 - [R ] Ĵ 取值 / d _ / / 输入 ˚F + ħ v 2 X [ ESC 瓦特 - [R ] $ ħ v ˚F 2 ÿ Ĵ ˚F 1 ħ ħ P 1 X X X

    嗯,这对我的大脑来说似乎要复杂得多,因为在每次击键之前都需要预处理的时间。

    例如,如果我想转移到f1,如果在前往1的途中没有其他f1,我需要用眼睛解析。

    我真的觉得我需要多年的训练才能“流利”。与vim。

    所以问题是:

    • vim guru如何对待这个例子?
    • vim guru是否存在?

1 个答案:

答案 0 :(得分:3)

我绝对不会认为自己是vim guru,尽管我每天都会使用它。首先回答你的第二个问题,可能是那些可以被视为大师的人,在vim中有很多选择和可能性,每个人都可以有自己的做事方式。此外,因为您可以根据自己的需要定制vim,所以很容易简化常规任务,而且这些配置可能会有很大不同。也被我认为是大师的人(例如,Derek Wyatt)声称仍然有很多关于vim的知识,所以它肯定需要数年才能成为一个。

但是不要气馁,只需要一些练习就可以开始思考vim-way,你的编辑任务会变得更容易:)

回到你的例子。首先,我用稍微少一点的键击来编辑第一行:

d

˚F - [R ]

B'/ KBD> d Ť d

[

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

  • d elete t 生病 a

  • f ind r 取代

  • b ack一个单词 d elete T ill(向后) d

  • i nsert [

当我应用这些更改时,我不必多想。你可能会认为这是违反直觉的,我首先跳到了)字符,但是我更容易发现结束括号而不是数字或 多次点击 h l 。当然你可能知道击键,但是当你编辑某些东西时,你永远不会记住所有这些。这是练习并强迫自己使用其中一些(如 t / T ) 把它们牢牢地放在你的手指下。另外,打印一张试图利用每把钥匙的备忘单,直到你用心去学习它。它不会花很长时间;)

正如威廉在评论中已经提出的那样,我也在这里考虑宏。它是一款功能强大且易于使用的工具,可以真正实现您的更改自动化。 我已经知道如何编辑第一行。在你的例子中,我知道在第二步中我将做同样的事情,但在略有不同的位置,所以不是编辑第一行,我立即记录一个宏,但我必须使它成为通用 更容易申请。所以我想在进行任何更改之前先将光标放在正确的位置。我的宏看起来像这样:

q q

0 f d d t a f r ] b d < kbd> T d i [

q

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

应用此宏

现在,您必须在第三行中替换此f1。你仍然在光标的第二行,所以你只是猛拉: 0 ˚F ý $

然后将其粘贴到第三行: Ĵ $ B'/ KBD> P d

当你只编辑3行时,使用宏看起来像一个多余的东西,但是当你习惯以vim方式进行更改时,你会真正感觉到你正在利用它来做到这一点&#39;的力量。

当记住记录的宏时,它并不那么难,你必须有正确的态度。首先,您将宏记录到寄存器,因此键入:registers将显示您的宏。其次,你可以编辑它们, 通过粘贴特定寄存器,更改它然后保存到同一个寄存器。然后你可以用@[register_letter]来播放它。最后,不要附加到特定的宏。保存一两个,使用它们进行多项更改 曾经忘了他们。然后在同一封信下记录另一个。例如,如果您意识到必须对文件进行一些重复更改,请使用qq,因为它快速而直观。你很少做出改变之后 需要再次播放相同的宏,因为整个缓冲区已经处于正确的状态。但如果您知道,您需要它,请在另一个字母下记录下一个宏。如果您能够以直观的方式进行变更,那么就可以了 它们很容易被重复,你会发现记录另一个宏要比记录你之前录制的哪个字母要容易得多。

我希望这个答案会让你相信,你不需要多年的训练才能流利,但当然不会在一夜之间发生;)