VIM进阶学习笔记(二) 总结复习vim的移动光标导航

发布时间 2023-08-06 16:03:25作者: 应晚星

惊闻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%  看日志很好用。