本文主要总结vim常用方法。如有错误或者不足之处,请指出。
1. 模式切换
- i 从目前光标所在处插入
- I 在目前所在行的第一个非空格符处开始插入
- a 从目前光标所在的下一个字符处开始插入
- A 从光标所在行的最后一个字符处开始插入
- o 在目前光标所在的下一行处插入新的一行
- O 为在目前光标所在处的上一行插入新的一行
- r 只会取代光标所在的那一个字符一次
- R会一直取代光标所在的文字,直到按下 ESC 为止
- Esc 退出编辑模式,回到一般模式
2. 一般模式
2.1 常用命令
- ctrl+b 屏幕往后移动一页
- ctrl+f 屏幕往前移动一页
- n+空格 光标向右移动n个字符
- H 光标移动到屏幕左上角
- L 光标移动到屏幕左下角
- G 移动到最后一行
- nG 移动到第n行
- gg 移动到第一行,相当于1G
- n光标向下移动n行
3. 命令行模式
3.1 查找
- /word 向光标向下寻找一个名称为word的字符串
- ?word 向光标向上寻找一个名称为word的字符串
- n 代表重复前一个查找的动作
- N 与n刚好相反
3.2 替换
语法:
:[range] s/{old-pattern}/{new-pattern}/[flags]
- range确定范围,不写默认为当前行。
% # 表示整个文件内容
. # 表示当前行
$ # 表示最后一行
m,n #表示从第m行到第n行
,n # 表示从当前行到第n行
n, # 表示从第n行到当前行
n # 指定行
+n # 表示当前行之后的n行
- old-pattern为要被替换的字符串,new-pattern为替换后的新字符串。替换操作与搜索操作使用同样的模式串系统。
- flags为替换标志位,默认为指定范围内的行的第一次匹配的位置,帮助文档:h s_flags,常用标志如下:
g:global,表示在指定范围内执行全局操作,替换所有匹配项
c:confirm,可以确认或拒绝修改
n:number,报告匹配到的次数,不替换,可用来查询匹配次数
i: 执行不区分大小写的替换
I: 执行区分大小写的替换
e: 防止替换失败时显示错误消息
- 举例
:% s/原文本/目标文本/g # 全局替换,将原文本全部替换为目标文本
:% s/原文本/目标文本/ # 每行第一次匹配原文本的地方替换为目标文本
:% s/文本//n # 统计指定文本在文件中出现的次数
:% s/^/# /g # 每行的行首添加注释符#
:% s/^/\/\/ /g # 每行的行首添加注释符//
- 结合正则表达式
:范围 s/\<文本\>/目标文本/标志 # 精确匹配指定文本,排除掉仅仅只是包含指定文本的地方
:% s/\<if\>/must/g
3.2 删除、复制与粘贴
- x 向后删除一个字符
- X 向前删除一个字符
- nx 连续向后删除n个字符
- dd 删除光标所在行
- ndd 删除光标所在的向下n行
- d1G 删除光标所在行到第一行的所有数据
- dG 删除光标所在到最后一行的所有数据
- d$ 删除光标所在处,到该行的最后一个字符
- d0 删除光标所在处,到该行的最前一个字符
- yy 复制光标所在的那一行
- nyy 复制光标所在的向下n列
- y1G 复制光标所在行到第一行的所有数据
- yG 复制光标所在行到最后一行的所有数据
- y0 复制光标所在的那个字符到该行行首的所有数据
- y$ 复制光标所在的那个字符到该行行尾的所有数据
- p将已复制的数据在光标下一行粘贴上
- P 则为贴在光标的上一行
- u 恢复前一个操作
- Ctrl+r重做上一个操作
4. vim常用设置
在home目录下执行vi .vimrc,输入如下参数:
set wrap "设置自动换行
set tabstop=4 "设置tab长度为4
set softtabstop=4 "使得按退格键时可以一次删除4个空格
set shiftwidth=4 "设定>命令移动时宽度为4
set autoindent "自动缩进
set cindent "C语言缩进风格
set number "显示行号
colorscheme desert "设置颜色方案
set fileencodings=utf-8,gb2312,gbk,gb18030 "自动探测fileencoding的顺序列表
set termencoding=utf-8 "vim终端的字符编码方式
set encoding=utf-8 "vim内部使用的编码方式