VIM进阶学习笔记(二) 总结复习vim的移动光标导航
惊闻vim作者 Bram Moolenaar 去世,享年 62 岁。
唉,这vim还没学会,太遗憾了。。。几十年致力于这么伟大的工具开发,令人敬佩。致敬。
个人从vim大致入门后,使用了基本配置 vim操作体验来看,vim是在Linux等命令行界面,以及鼠标还未普及的情况下,使得通过纯键盘操作达到十分便捷的强大编辑器。
纯靠键盘操作,便可十分方便的打开某个文件,翻页,定位到某行,块选择,复制,粘贴。这样已经能达到普通人用鼠标的开发效率了。。配合内部强大的宏录制,命令选项,插件等等,还能极大提高个人定制化高级操作特性。
缺点就是为了用键盘发挥鼠标的功能,命令模式下各个键位的功能都需要记忆。(其实现代IDE,也要记忆很多快捷键的,比如行跳转 Ctrl+G, 首行 Ctrl+Home,末行 Ctrl+End 等等)
可以这么说,在IDE 还未发明或者十分契合的时代, VIM就可以配置成为一个强大的IDE。
现如今,鼠标+IDE的可视化界面,极大的方便普通人编程的方式。
但VIM的出现,却是对编程历史发展做出不可磨灭的贡献的。
目前结合个人经验,vim 学习可以简化为这几个阶段。
1. 进入vim, i 进入编辑模式,上下左右修改文件, :wq 保存退出。 :q! 强行退出 (基本能用的入门阶段)
2. 通读vim 教程,熟悉3种模式,了解 动词+名词 设计理念。 学习VIM 移动光标导航。(大致就是这篇所对应的初级进阶,我大概也还在熟悉中)
话说回来,这节就作为VIM内移动光标定位的一个复习总结吧。
功能设置为浅色字,作为填空题自己联想,反选可以看具体功能说明。
参考资料:https://github.com/wsdjeg/Learn-Vim_zh_cn/blob/master/ch05_moving_in_file.md
| 字符导航 | 功能 | 补充说明 |
| hjkl | 左上下右 | 很基础了。多用用就能习惯。刚开始学习可以配合用方向键 |
| gj | 下 (自动换行时) | |
| gk | 上 (自动换行时) | |
| 单词导航 | ||
| w/W | 移动到下一个单词/词组的开头 | 一个单词指的是一个只包含a-zA-Z0-9字符串 |
| e/E | 移动到下一个单词/词组的结尾 | 一个词组指的是一个空字符隔开的字符串(包括'"[]{} 等符号) |
| b/B | 移动到上一个单词/词组的开头 | |
| ge/gE | 移动到上一个单词/词组的结尾 | 感觉用的较少,不用记 |
| 当前行导航 | ||
| 0 | 跳到本行第一个字符 | |
| ^ | 跳到本行第一个非空字符 | |
| g_ | 跳到本行最后一个非空字符 | 两个按键的,感觉都可以先不用记 |
| $ | 跳到本行最后一个字符 | |
| n| | 跳到本行第n列 | n是数字 |
| f/F | 在同一行向后/向前搜索第一个匹配 | 行内字符搜索。。英文字母定位很适合,中文就不好用了。 |
| t/T | 在同一行向后/向前搜索第一个匹配,并停在匹配前 | |
| ; | 在同一行重复最近一次搜索 | |
| , | 在同一行向相反方向重复最近一次搜索 | |
| 句子和段落导航 | ||
| ( | 跳到前一个句子 | 一个句子的定义是以.!?和跟着的一个换行符或空格,tab结尾的 |
| ) | 跳到下一个句子 | 这个定义很适合英文文章内跳转。不知道有没有兼容中文句子的配置 |
| { | 跳转到上一个段落 | 一个段落总是以一个空行开始和结尾。空行是纯换行不包含回车的 |
| } | 跳转到下一个段落 | 段落前会停在段落前的上一个空行,段落后会停在段落后的下一个空行 |
| 匹配导航 | ||
| % | 跳转到匹配的另一个括号处,一般用于(),[],{} | 这个,我感觉是超越普通IDE的跳转功能,尤其适合编程开发 |
| 行号导航 | 想看文件总行数,可以用CTRL-g查看 | |
| gg | 跳转到第一行 | |
| G | 跳转到最后一行 | 查看日志时非常有用 |
| nG / ngg | 跳转到第n行 | n代表数字,这个跳转也非常有用。各种IDE 也几乎都提供快捷键 |
| n% | 跳转到文件的n% | 浏览特别大的日志文件时,很有用。 |
| 窗格导航 | ||
| H | 跳转到屏幕的顶部 | 移动光标,移动范围取决于当面屏幕显示的范围 |
| M | 跳转到屏幕的中间 | |
| L | 跳转到屏幕的底部 | |
| nH | 跳转到距离顶部n行的位置 | |
| nL | 跳转到距离底部n行的位置 | |
| 滚动 | ||
| Ctrl-e / Ctrl-y |
向下滚动一行 / 向上滚动一行 | |
| Ctrl-d / Ctrl-u | 向下滚动半屏 / 向上滚动半屏 | |
| Ctrl-f / Ctrl-b | 向下滚动一屏 / 向上滚动一屏 | |
| zt | 将当前行置于屏幕顶部附近 | |
| zz | 将当前行置于屏幕中央 | 某ideavim的配置里,就在很多跳转定义后加了zz,就很方便 |
| zb | 将当前行置于屏幕底部 | |
| 搜索导航 | ||
| / |
向下搜索一个匹配 | 基本会使用后,必须要学的技能。相当于Ctrl+F |
| ? | 向上搜素一个匹配 | 反向Ctrl+F |
| n | 重复上一次搜索(和上一次方向相同) | 下一处匹配 |
| N | 重复上一次搜索(和上一次方向相反) | 上一处匹配 |
| * | 向后搜索光标所在的整个单词 | 整词匹配,会匹配左右是空格整个字符串 |
| # | 向前搜索光标所在的整个单词 | |
| g* | 向后搜索光标所在的单词,非整词匹配 | 非整词匹配,类似于单纯 Ctrl+F 搜索双击选中的空格隔开的字符串 |
| g# | 向前搜索光标所在的单词,非整词匹配 | |
| 位置标记 | ||
| ma | 用a标签标记一个位置 | 通过mx设置一个标记,其中x可以是a-zA-Z |
| `a | 精确回到a标签的位置(行和列) | A-Z的标签是全局标签,可以跨文件定义和跳转 |
| 'a | 跳转到a标签的行 | |
| '' | 在当前buffer中跳转回到上一次跳转前的最后一行 | 以下这些,感觉不用记。。用的很少 |
| `` | 在当前buffer中跳转回到上一次跳转前的最后一个位置 | |
| `[ | 跳转到上一次修改或拷贝的文本的开头 | |
| `] | 跳转到上一次修改或拷贝的文本的结尾 | |
| `< | 跳转到最近一次可视模式下选择的部分的开头 | |
| `> | 跳转到最近一次可视模式下选择的部分的结尾 | |
| `0 | 跳转到退出Vim前编辑的最后一个文件 |
基本上,VIM 常用的跳转导航,就在这里了。。。
熟练使用到肌肉记忆的话,你的vim 导航已经就不亚于使用 IDE+鼠标 定位了。
推荐你从h,j,k,l,w,b,G,/,?,n开始。 还有 gg,n% 看日志很好用。


浙公网安备 33010602011771号