vim键盘图
基本模式
- 编辑模式
编辑模式用于对文件中的指定内容执行保存、查找或替换等操作。使 Vim 切换到编辑模式的方法是在命令模式状态下按“:”键,此时 Vim 窗口的左下方出现一个“:”符号,这是就可以输入相关指令进行操作了。 - 输入模式
输入模式用于对文件执行写操作。使 Vim 进行输入模式的方式是在命令模式状态下输入 i、I、a、A、o、O 等插入命令。 - 命令模式
默认处于命令模式。此模式下,可使用方向键(上、下、左、右键)或 k、j、h、i 移动光标的位置,还可以对文件内容进行复制、粘贴、替换、删除等操作。
模式转换
命令模式 → 输入模式
i:insert,在光标所在处输入
a:append,在光标所在处后面输入
I:在当前光标所在行的行首输入
A:在当前光标所在行的行尾输入
o: 在当前光标所在行的下方打开一个新行
O:在当前光标所在行的上方打开一个新行
c: 连续两次键入删除该行并输入
C: 删除光标到结尾内容并输入
输入模式→命令模式
ESC
命令模式→编辑模式
:
编辑模式→命令模式
ESC
关闭文件
:q 退出
:q! 强制退出,丢弃做出的修改;
:wq 保存退出
:x 保存退出
:w /PATH/TO/SOMEWHERE
ZZ 保存退出
光标跳转
- 字符间跳转
h: 左
l: 右
j: 下
k: 上
#COMMAND:跳转#个数的字符;
- 单词间跳转
w:下一个单词的词首
e:当前或下一单词的词尾
b:当前或前一个单词的词首
#COMMAND:由#指定一次跳转的单词数
- 行首行尾跳转
^: 跳转至行首的第一个非空白字符;
0: 跳转至行首;
$: 跳转至行尾;
- 行间跳转
#G: 跳转#行;
G: 最后一行;
1G, gg: 第一行;
- 句间移动
(: 向上一句移动
): 向下一句移动
- 段落间移动
{: 向上一段移动
}: 向下一段移动
编辑命令
- 字符编辑
x: 删除光标处的字符;
#x: 删除光标处起始的#个字符;
xp: 交换光标所在处的字符及其后面字符的位置;
- 替换命令
r: 替换光标所在处的字符
R: 从光标开始处连续替换后面多个字符,ESC退出输入模式
- 删除命令
d^: 删除光标到行首
d$: 删除光标到行尾
dd: 删除光标所在行
dw: 删除w命令跳转的单词
db: 删除b命令跳转的单词
de: 删除e命令跳转的单词
#COMMAND: 删除#次
- 改变命令
c^: 删除光标到行首,并进入输入模式
c$: 删除光标到行尾,并进入输入模式
cc: 删除光标所在行,并进入输入模式
cw: 删除w命令跳转的单词,并进入输入模式
cb: 删除b命令跳转的单词,并进入输入模式
ce: 删除e命令跳转的单词,并进入输入模式
#COMMAND: 删除#次,并进入输入模式
- 复制命令
y^: 复制光标到行首
y$: 复制光标到行尾
yy: 复制光标所在行
yw: 复制w命令跳转的单词
yb: 复制b命令跳转的单词
ye: 复制e命令跳转的单词
#COMMAND: 复制#次
- 粘贴命令
p:缓冲区存的如果为整行,则粘贴当前光标所在行的下方;否则,则粘贴至当前光标所在处的后面
P:缓冲区存的如果为整行,则粘贴当前光标所在行的上方;否则,则粘贴至当前光标所在处的前面
- 可视化模式
v: 按字符选定
V:按行行定
经常结合编辑命令: d,c,y
- 撤销
u: 撤消此前的操作;
#u: 撤消指定次数的操作;
- 反撤销
Ctrl+r: 恢复上一次撤销
- 重复执行
.: 重复执行上一次操作
翻屏操作
Ctrl+f: 向文件尾部翻一屏;
Ctrl+b: 向文件首部翻一屏;
Ctrl+d: 向文件尾部翻半屏;
Ctrl+u: 向文件首部翻半屏;
查找替换
地址定界
#:具体第#行,例如2表示第2行;
#,#:从左侧#表示行起始,到右侧#表示行结尾;
#,+#:从左侧#表示的行起始,加上右侧#表示的行数;
.:当前行
$:最后一行
%:全文,相当于1,$
/pat/:模式匹配
编辑
d:删除匹配到的内容
y:复制匹配到的内容
w /PATH/TO/SOMEWHERE:将范围内的行另存至指定文件中
r /PATH/FROM/SOMEFILE:在指定位置插入指定文件中的所有内容
查找
/PATTERN:从当前光标所在处向文件尾部查找
?PATTERN:从当前光标所在处向文件首部查找
n:查找下一个与命令同方向
N:查找下一个与命令反方向
/PATTERN\c 忽略大小写
替换
格式:
地址定界s/查找内容/替换内容/修饰符
要查找的内容:可使用模式
替换为的内容:不能使用模式,但可以使用\1, \2, ...等后向引用符号;还可以使用“&”引用前面查找时查找到的整个内容;
修饰符:
i: 忽略大小写
g: 全局替换;默认情况下,每一行只替换第一次出现;
格式中"/"分隔符可替换为@和#
s@@@
s###
实例:
删除文本中的空白行
:g@\(^$\)\|\(^\s\+$\)@d
:g/^\s*$/d
删除行首空格:
:%s/^\s*//g
删除行尾空格:
:%s/\s*$//g
多文件模式
vim FILE1 FILE2 FILE3 ...同时打开多个文件编辑
:next 下一个
:prev 前一个
:first 上一个
:last 最后一个
:wall 保存所有
:qall 退出所有
多窗口模式
vim -o|-O FILE1 FILE2 ...同时打开多个文件,分屏显示
-o: 水平分割
-O: 垂直分割
vim FILE1
Ctrl+w+s: split, 水平分割显示
Ctrl+w+v: vertical, 垂直分割显示
在窗口间切换:Ctrl+w+(j、k、h、l)
vim特性
Vim 的全局配置一般在/etc/vimrc,对所有用户生效。用户个人的配置在~/.vimrc。
- 行号
显示:set number, 简写为set nu
取消:set nonumber, 简写为set nonu - 括号匹配
匹配:set showmatch, 简写为set sm
取消:set nosm - 高亮搜索
启用:set hlsearch
禁用:set nohlsearch - 语法高亮
启用:syntax on
禁用:syntax off - 忽略字符的大小写
启用:set ic
禁用:set noic - tap缩进
set tabstop=4 - shift缩进
set shiftwidth=4 - 自动缩进
set autoindent - 粘贴格式
启用:set paste
禁用:set nopaste - 启用鼠标
set mouse=a - 设置编码
set encoding=utf-8
自动添加注释
编辑配置文件,添加如下内容,在使用vim便可以按F6添加如下内容。
[root@localhost ~]# cat .vimrc
function AddTitle()
call setline(1,"#!/bin/bash")
call append(1,"#====================================================")
call append(2,"# Author: liuxiangtao")
call append(3,"# Create Date: " . strftime("%Y-%m-%d"))
call append(4,"# Description: 描述内容")
call append(5,"#====================================================")
endf
map <F6> :call AddTitle()<cr>