#1 Vim 备忘录

2018-01-03

我并不是个 Vim 高手,但是我所掌握的知识对于轻量使用来说,也够用了。
这就是我能想到的全部 Vim 知识。

如果你是一个新手,看看这篇文章,应该可以快速入门 Vim,能解决所有简单编辑任务所会面临的问题。

基础知识

避免由于意外操作而不知所措。

模式

  • 普通模式(Normal):直接打开文件(vim filepath)就进入了这个模式,可以移动光标,执行一些指令
  • 插入模式(Insert):像普通编辑器一样编辑文本
  • 可视模式(Visual):先在普通模式下移动光标到目标区域,然后切换到可视模式,这时移动光标就可以选中一块区域,对着块区域的内容执行一些命令
  • 命令模式:在 Vim 底部输入命令,按回车执行
  • 选择模式(Select):正常我们能够理解的选中,然后删除或者对着一块进行替换
  • Ex 模式:。。。

模式切换:

  1. 在任何模式下按 Esc 就可以回到普通模式
  2. 普通模式下,按 i 进入插入模式;
  3. 普通模式下,按 v 进入可视模式(字符);
  4. 普通模式下,按 V 进入可视模式;
  5. 普通模式下,按 Ctrl + v 进入可视模式;
    1. Windows 系统下 Ctrl + v 被占用作为粘贴快捷键,可以使用 Ctrl + q 代替;
  6. 普通模式下,按 : 进入命令模式;
  7. 可视模式下,按 Ctrl + g 进入选择模式;
  8. 选择模式下,可以按 Ctrl + o 回退到可视模式;

快捷键

上下左右,翻页(PageUp,PageDown),删除(Backspace,Del)本身就可以用,就不用记快捷键了。

Key Function
u 撤销
dd 删除当前行
3dd 删除当前行 + 后面两行(共 3 行)
>> 缩进
<< 取消缩进
== 自动对齐

使用命令 5d 删除第五行
使用命令 5,10d 删除第 5 到第 10 行

跳转

Key Function
gg 跳到第一行
20gg 跳到第 20 行
G 跳到最后一行
10j 往前跳 10 行
10k 往后跳 10 行

hjkl 本身用来表示左上下右,所以...

复制粘贴

Key Function
yy 复制当前行
3yy 复制当前行 + 后面两行(共 3 行)
yw 复制当前单词和后面的空白字符
p Paste 粘贴在当前行、字符后面
P Paste 粘贴在当前行、字符前面

搜索

Key Function
? 向后搜索(正则)
/ 向前搜索(正则)
# 向后搜索当前单词,等同于输入 #\<xxx\>
* 向前搜索当前单词,等同于输入 /\<xxx\>
  1. n/N 跳到上一处或下一处
  2. \cp[a-z]*n 忽略大小写,搜索 p 开头,n 结尾的单词

命令

一般都有取消配置的 set noXXX 命令。

Key Function
set nu 显示行号
set paste 粘贴模式(避免开启自动缩进时,会弄乱粘贴内容)
set ignorecase / set ic 搜索忽略大小写
set hlsearch 高亮搜索结果(似乎是默认)
set nohlsearch 取消高亮搜索结果
noh 关闭高亮
set listchars=tab:>~,trail:. 显示 TAB 键和行末空格
set cursorline 当前行加上下划线

替换

Key Function
s/Gitee/Gitea/g 将当前行所有 Gitee 替换成 Gitea
%s/Gitee/Gitea/g 将所有行所有 Gitee 替换成 Gitea
%s/Gitee/Gitea/gi ...忽略大小写
%s/Gitee/Gitea/gin ...不真正执行,只反馈印象范围
5,10s/Gitee/Gitea/g 将第 5 到 10 行所有 Gitee 替换成 Gitea
.,+5s/Gitee/Gitea/g 将当前行到后两行所有 Gitee 替换成 Gitea

保存

Key Function
q 退出(可能会提示你:已修改但尚未保存)
w 保存
wq 保存并退出
x 保存并退出
q! 不保存,强行退出
:w !sudo tee % 没有写入权限的时候提权保存

清空数据:gg + 1000dd(跳到第一行,然后删除 1000 行)

> filepath
# 或
echo > filepath

参考资料与拓展阅读