# 快如闪电：让移动再次快起来 make move faster ~~again~~

前面几天学到了光标一些的“快捷”移动方式，如 `hjkl` `b` `w` `e` 等等，但是在真实的使用中，他们的快捷确实是需要打上双引号，因为等我们打开动则上千行的 ~~屎山~~ 代码时，这些移动光标的方法就捉襟见肘了；这一节，我们就要祭出 vim 的一个大杀器，让我们的光标移动飞速起来！

## 给我滚！

  先来看看让页面滚动起来的指令：
  
  - 向下滚动一屏：`ctrl + f`
  - 向上滚动一屏：`ctrl + b`
  - 向下滚动半屏：`ctrl + d`
  - 向上滚动半屏：`ctrl + u`
  - 向下滚动一行：`ctrl + e` , 光标不会移动，只是屏幕滚动
  - 向上滚动一行：`ctrl + y` , 光标不会移动，只是屏幕滚动

  这时候，我们就可以愉快地在 ~~屎山~~ 代码中快速移动了。可是问题又来了，这几个指令动则半个屏幕移动，要不就一行行移，有没有在这些范围内的更适合平时使用的呢？

  答案是：没有。

  但不代表不可以，这时我们就要用老办法 -- 修改配置来达成需求了。

  打开 vscode `setting.json`，在 `vim.visualModeKeyBindings` 和 `vim.normalModeKeyBindings` 中添加如下设置：

  ```json

    "vim.normalModeKeyBindings": [
        ...
        {
            "before": ["J"],
            "after": ["5", "j"]
        },
        {
            "before": ["K"],
            "after": ["5", "k"]
        }
        ...
    ],
    "vim.visualModeKeyBindings": [
        ...
        {
            "before": ["J"],
            "after": ["5", "j"]
        },
        {
            "before": ["K"],
            "after": ["5", "k"]
        }
        ...
    ],
  ``` 

  这里的配置是把 `J` `K` 映射成每次跳五行的效果，当然，如果你觉得不合适也可以根据自己的需求更改。配置完后，就可以在方便地跳转了。

  ## 光标位置

  有时候在我们的光标移动到要编辑的行时，可能刚好这一行在屏幕的顶部或底部，或者需要跳转到文件的头或尾，这里有更快捷的指令：

  - 将当前行置于屏幕中央：`zz`
  - 将当前行置于屏幕顶部：`zt`，t 即 top
  - 将当前行置于屏幕底部：`zb`，b 即 bottom
  - 跳到文件首：`gg`
  - 跳到文件尾：`G`

  如果是以上所有的命令都无法让你快速跳到要去的行，这时候就有一个终极方法：

  - 行数 + `gg` / `G`：跳到指定行；只要你知道行数，就可以准确无误地跳到那一行，在调试或查看报错位置时特别有用。比如跳到 1024 行，输入 `1024 gg`，这时候再搭配 `zz`，让当前行置于屏幕中间，然后就可以愉快 coding 了~

  ## 小练习

  这一天没有练习，去屎山里跳动吧！go and get it！
