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% 看日志很好用。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通