一、基本快捷键

几点经验:

  • 如果要将vim向vscode对齐,没有插件是做不到
  • vim的插件要编写众多的配置文件、并且有部分插件挑平台;想要像vscode那样基本上开箱即用比较困难
  • 刚开始学习还能折腾一下,到最后发现:vim最本质的是没有插件的本体。很多时候没有条件(或不想)配置插件,而能否熟练操作本体才是最关键的!

这篇文章将从四个方面:编辑、window、buffer、tabine,总结自己常用的vim自带的快捷键或指令。其中,后三个窗口相关的快捷键也比较相似,其设计思路和 tmux 是很相似的。

一、编辑:增删改查

目的:补充几个好用、但可能不常用的快捷键。

光标移动

  • % 在匹配的括号对之间跳转。
  • 0^ 都能实现移动到行首,区别在于 ^ 是移动到行首第一个字符。
  • M 将光标移动到屏幕中部,L 为屏幕底部,H 为屏幕顶部。
  • ctrl-u, ctrl-d 只会翻半页,ctrl-f, ctrl-b 会翻一页;

  • a 是在光标后插入,i 是在光标前插入;
  • A 是在当前行最后插入,I 是在当前行首插入;
  • o 为在下方插入一行并进入插入模式,O 为上一行。
  • q 进入宏记录模式,输入字母会把记录的内容存到当前字母下,最后按 q 退出。

整行的格式调整:

  • <<, >> 整行向左(右)缩进。
  • >%, <%{}, (), [] 包裹的内容向右(左)缩进。
  • :le :ce :ri 分别实现当前行居左、中、右对齐。

不用进入Insert模式、一些快速的修改:

  • ~ 对当前光标字符进行大小写反转;
  • u 为撤销一次,U 为撤销所有修改,<C-r> 为反撤销。
  • .: 修改完之后移动至下一个单词处,按 . 可重复相同操作。

比如 test test 修改为 st test,移动到第二个 test 处在 normal 下按点,则会重复相同的操作。

替换

替换操作的标准形式是::{作用范围}s/{目标}/{替换}/{替换标志}

作用范围的不同:

  • :%s/foo/bar/g 在全局范围(%)查找 foo 并替换为 bar,所有出现都会被替换(g)。
  • :s/foo/bar/g 当前行。
  • :'<,'>s/foo/bar/g 选区,在 Visual 模式下选择区域后输入 :,Vim 即可自动补全为 :'<,'>
  • :5,12s/foo/bar/g 5-12 行。
  • :.,+2s/foo/bar/g 当前行 . 与接下来两行 +2

替换标志的不同:

  • :s/foo/bar/g 全局替换。
  • :%s/foo/bar 空替换标志表示只替换从光标位置开始,目标的第一次出现。
  • :%s/foo/bar/i 其中 i 表示大小写不敏感查找,I 表示大小写敏感
  • :%s/foo\c/bar 使用 i 等效于模式中的 \c(不敏感)或 \C(敏感)
  • :%s/foo/bar/gcc 表示需要确认。回车后 Vim 会将光标移动到每一次 "foo" 出现的位置,并提示 replace with bar (y/n/a/q/l/^E/^Y)?

按下 y 表示替换,n 表示不替换,a 表示替换所有,q 表示退出查找模式, l 表示替换当前位置并退出。^E^Y 是光标移动快捷键

查找和跳转

  • /word 为向后全文搜索,?word 为向前全文搜索;
  • 在当前单词上按 * 为向后搜索当前光标所在单词,按 # 为向前搜索;
  • g; 跳转到上次修改的位置,g, 跳转到下次修改的位置。
  • gd 跳转到局部变量定义处(这类似于查找,和 ctags 是有区别的),gD 为全局查找;
  • :q 为退出,而 q: 为:进入输入历史,相当于 :history

和替换类似,在查找模式中加入 \c 表示大小写不敏感查找,\C 表示大小写敏感查找。比如 /foo\c 将会查找所有的 "foo","FOO","Foo" 等字符串。

标记

标记是为了更好地查找,在normal模式下设置标记:

  • mx meaning: mark x, x is the name of mark ;
  • 'x meaning: go to the position of x mark

如果在函数中看到调用其他函数,你想去看怎么定义的,你看完之后要回来,那么先标记一下,然后在跳回来。

复制粘贴

  • p 粘贴在当前光标位置之后,P 粘贴在光标位置之前;

二、buffer

查看 buffer

当一次性打开多个文件 nvim test1.py test2.py test3.py 时,然后可以用 :ls 查看现有的缓冲区列表:
ls查看缓冲区列表

解释一下上图中的含义:

  • 竖排的 1,2,3 表示缓冲区编号,在当前 Vim 会话中,它的值保存不变
  • % 表示该缓冲区位于当前窗口中,a 表示该缓冲区处于活动状态,即它已经被加载可见;
    • 当切换缓冲区时会变成 #h,代表该缓冲区不在当前窗口中,为隐藏不活动状态;
    • 当我们正在编辑一个文件时,是无法切换缓冲区的!可以设置 set hidden 允许切换,并由 vim 负责保存修改;
  • xxx.py 表示该缓冲区的文件名称;
  • line XX 表示当前窗口光标所在的行号;

buffer 管理

:b 配合关键字实现缓冲区之间的切换和管理:

  • 后跟一个数字(缓冲区的编号),如 :b2 表示切换到第 2 个缓冲区;
  • 后跟文件名的一部分切换缓冲区,如 :b test1
  • :bn 代表下一个缓冲区,:bp 为上一个缓冲区;
  • :bd 关闭当前缓冲区,无需退出 Vim ;

其实,直接在 vim 中调用终端,本质上也是个 buffer。

  • :shell 会暂时退出 vim 界面到 shell,使用完后输入 exit 退出;
  • :terminal zsh 默认会水平打开终端,退出需要先 exit<C-d>,然后关闭此 buffer 即可。

三、window

  • :sp [filename] 上下分割文件,缺省文件名会 clone 当前文件,也可以使用 <C-w>s 快捷键。
  • :vs 为左右分割,同 <C-w>v

四、tabine

posted @ 2024-06-06 20:52  7hu95b  阅读(70)  评论(0)    收藏  举报