VIM

1. 汇总操作

退出VIM

通过命令行模式退出

命令 说明 命令 说明
:q 退出 :q! 强制退出,不保存
:wq 保存并退出 :wq! 强制保存并退出
:w <文件路径> 另存为 :saveas 文件路径 另存为
:x 保存并退出 shift + zz 保存并退出

普通模式进入命令行模式

命令 说明 命令 说明
i 在当前光标处进行编辑 I 在行首插入
a 在光标后插入编辑 A 在行末插入
o 在当前行后插入一个新行 O 在当前行前插入一个新行

2. 普通模式

移动游标

按键 说明 按键 说明
h l 右(小写 L)
j k
b 移动到上一个单词 w 移动到下一个单词
C-d 向下移动半屏(down) C-u 向上移动半屏(up)
C-f 向下翻页(forward) C-b 向上翻页(back)

删除内容

命令 说明 命令 说明
x 删除游标所在的字符 X 删除游标所在前一个字符
Delete x dd 删除整行
d$D 删除至行尾 d^ 删除至行首
dG 删除到文档结尾处 d1G 删至文档首部
dwdaw 删除一个单词(不适用中文)(delete a word) :%d 删除所有

重复命令

命令 说明 命令 说明
. 重复上一次操作 10x 删除10个连续字符
3dd 删除3行文本 dnw 删除n个单词

快速跳转

命令 说明 命令 说明
gg 游标移动到到第一行 G(Shift+g) 到最后一行
Ctrl + o 回到上次光标所在位置 nG(n Shift+g) 游标移动到第 n 行

行内跳转

命令 说明 命令 说明
e 到当前单词的结尾 w 到下一个单词的开头
b 到前一个单词的开头 ge 到前一个单词的结尾
0^ 到行头 $ 到行尾
f<字母> 向后搜索<字母>并跳转到第一个匹配的位置(非常实用) F<字母> 向前搜索<字母>并跳转到第一个匹配的位置
t<字母> 向后搜索<字母>并跳转到第一个匹配位置之前的一个字母(不常用) T<字母> 向前搜索<字母>并跳转到第一个匹配位置之后的一个字母(不常用)

复制和粘贴

命令 说明 命令 说明
y 复制 dd 剪切
yy 复制整行 3yy 复制三行
y^y0 复制至行首,不含光标字符 y$ 复制至行未,含光标所在
yw 复制一个单词 y2w 复制两个单词
yG 复制至文本末 y1G 复制至文本开头
p(小写) 粘贴至光标后 P(大写) 粘贴至光标前

替换

命令 说明 命令 说明
r+<待替换字母> 将游标所在字母替换为指定字母 R 连续替换,直到按下Esc
cc 替换整行,即删除游标所在行,并进入插入模式 cw 替换一个单词,即删除一个单词,并进入插入模式
C(大写) 替换游标以后至行末 ~ 反转游标所在字母大小写
u{n} 撤销一次或 n 次操作(undo) U(大写) 撤销当前行的所有修改
Ctrl+r redo,即撤销 undo 的操作 :%!sort 对内容排序(将一行内容看成一个字符串,然后按字符串大小进行排序)

命令底行模式替换公式:

:起始位置,终止位置s/被替换对象/替换内容/参数

起始位置:默认为1,.代表当前位置

终止位置:默认为$,可以使用具体的行号,+2表示向后两行

参数:g 全局匹配,i 忽略大小写,c 替换时提示,e 忽略错误

示例::s/foo/bar/g 全局将foo替换为bar,:5,12s/foo/bar/g 替换5到12行,:.,+2s/foo/bar/g 替换当前位置到后两行,:'<,'>s/foo/bar/g 可视模式下替换选中区域

快速缩进

命令 说明 命令 说明
>> 向右缩进 << 向左回退

快速查找

命令 说明 命令 说明
/ 向下查找 ? 向上查找
\* 查找游标所在处的单词,向下查找 \# 查找游标所在处的单词,向上查找
g\* 查找游标所在处的单词,向下查找,部分符合即可 g\# 查找游标所在处的单词,向上查找,部分符合即可

备注:n为向下找,N为向上找,查找内容支持正则表达式,但是表示次数的符号前需要使用\,如:/\d\{2,3}:/a\+

3. 命令行模式

命令 说明
:ce (center)文本居中
:ri (right)文本有对齐
:le (left)文本左对齐
:noh 退出搜索
:set hls 设置搜索高亮
:set shiftwidth=n 设置缩进和回退字符数
:set nu 显示行号
:set autoindent(ai) 设置自动缩进
:set autowrite(aw) 设置自动存档
:set background=dark/light 设置背景风格
:set backup(bk) 设置自动备份
:set cindent(cin) 设置C语言风格缩进
:set:se 显示所有修改过的配置
:set all 显示所有设定值
:set <option>? 显示option的设定值
:set nooption 取消当前设定值
:syntax on 设置语法高亮
:set tabstop=4:set ts=4 设置tab键对应的空格数
:set expandtab 设置tab自动替换为空格
:set nohls:nohlsearch 设置不高亮选中单词
:set clipboard+=unnamed 设置与当前设备共享剪贴板
:set cul/:set cuc 设置高亮行/列
imap <F4> if __name__ == '__main__': 设置快捷键映射
inoremap _main if __name__ == '__main__': 设置不递归调用映射
:set pastetoggle 粘贴切换(粘贴中自动缩进的问题)
:set ruler 设置显示光标位置

4. 高级功能

多文件编辑

命令 说明
vim 1.txt 2.txt 同时打开多个文件
vim -d 1.txt 2.txt 比较多个文件
:n/:N 切换到下/上一个文件
:n!/:N! 强制切换到下/上一个文件,之前的文件输入不保存
:e 3.txt 再打开一个文件
:e# 回到前一个文件
:ls 列出以前编辑过的文档
:b 2.txt或编号 直接跳转到该文件进行编辑
:bd 2.txt或编号 删除以前编辑过的列表中的文件项目
e! 4.txt 新打开文件,并放弃正在编辑的内容
:f 显示正在编辑的文件名
f new.txt 给正在编辑的文件重命名
vim -r :ewcover 1.txt 因断电等原因没有保存的文件恢复方式

可视模式

命令 说明
v 进入可视模式,光标走过位置被选中,再次按v取消
Shift+v 进入可视模式,按行进行选中,再次按Shift+v取消
Ctrl+v 进入可视模式,按矩形区域进行选中,再次按Ctrl+v取消
d 可视模式下删除选区内容
y 可视模式下复制选取内容

视窗操作

命令 说明
:new 打开一个新的水平视窗
vsp 2.txt 打开新的垂直分屏视窗来编辑 1.txt
:sp 1.txt 打开新的水平分屏视窗来编辑 1.txt
Ctrl+w s 将当前窗口分割成两个水平的窗口
Ctrl+w v 将当前窗口分割成两个垂直的窗口
Ctrl+w q 即 :q 结束分割出来的视窗。如果在新视窗中有输入需要使用强制符!即:q!
Ctrl+w o 打开一个视窗并隐藏之前的所有视窗
Ctrl+w j 移至下面视窗
Ctrl+w k 移至上面视窗
Ctrl+w h 移至左边视窗
Ctrl+w l 移至右边视窗
Ctrl+w J 将当前视窗移至下面
Ctrl+w K 将当前视窗移至上面
Ctrl+w H 将当前视窗移至左边
Ctrl+w L 将当前视窗移至右边
Ctrl+w - 减小视窗的高度
Ctrl+w + 增加视窗的高度

给文件加密

命令 说明
vim -x 文件名 输入您的密码,确认密码。下次打开就会要求输入密码

执行外部命令

命令 说明
:!ls 显示当前目录的内容
:!rm FILENSME 删除名为FILENAME的文件
w FILENAME 将当前正在编辑的文件另存为FILENAME的文件

帮助系统

命令 说明
F1 普通模式打开vim预设的帮助文档
:h shiftwidth 打开名为shiftwidth的帮助文件
:ver:version 显示版本号及参数

录制宏

命令 说明
q+任意字母 开始录制宏,再次按q取消录制
@+录制前输入的字母 播放宏

5. 操作实例

录制宏步骤

步骤:

  1. 在底行模式下输入qa后敲回车。其中a表示该宏的名称,可以自定义其他名称
  2. 接下来进行vim的操作,该操作会被完整的录制下来。
  3. 做完操作后回到底行模式按q结束录制。
  4. 如果需要播放就使用@a,a表示录制之前给宏取的名字。

实际使用示例:

在安装ArchLinux的时候,有一步需要将所有中国的镜像源提取到最前面去,但是所有中国的镜像源又分布在文件不同的位置,此时就可以使用VIM的宏来进行操作

  1. 在normal模式下按qa,然后敲回车
  2. 然后输入/China从当前行向下查找China字符
  3. 在找到的地方使用2dd剪切两行,4gg跳到第四行,p进行粘贴
  4. q结束录制
  5. 再输入@a就会重复2、3步骤

多行注释

注释:

  1. ctrl+v - 进入可视化块模式
  2. 上下移动光标选中需要注释的代码
  3. I(大i) - 进入插入模式
  4. 输入注释符号
  5. ese键完成

取消注释:

  1. ctrl+v - 进入可视化块模式
  2. 上下移动光标选中需要注释的代码
  3. 按小d即可取消注释

选中引号内的内容

  1. v - 进入可视模式
  2. 2i" - 选中双引号内的内容,同时选中双引号本身,但是不包括引号外的空格