位置:海鸟网 > IT > linux/Unix >

vim基本用法汇总

vim工作模式:
编辑模式(命令模式)
输入模式
末行模式 
启动vim:
vim [option] FILE ...
vim +[#] FILE 打开文件并使光标处于第N行 (本文中#表示数字N)
vim + FILE  打开文件使光标处于最后一行
vim +/PATTERN FILE ... 打开文件使光标处于被模式匹配到的第一行的行首
退出vim:
未修改直接退出:q
不保存强制退出:q!
保存退出:wq, 
强制保存(编辑只读文件等特殊文件时):w!
保存: 在编辑模式下,ZZ
打开默认模式:编辑模式
编辑模式-->输入模式:
i: 当前光标所在字符前面插入
a: 当前光标所在字符后面插入
o: 当前光标所在行的下方新增空白行并输入
I:当前光标所在行的行首插入
A:当前光标所在行的行尾插入
O:当前光标所在行的上方新增空白行并输入
c: 先删除指定范围的内容,再转换至输入模式(同d用法类似)
输入模式-->编辑模式:
Esc
编辑模式-->末行模式
:
末行模式-->编辑模式:
Esc不马上回到编辑模式
Esc Esc 马上回到编辑模式

光标跳转:
h 左
j 下
k 上
l 右
词间跳转:
w: 下一个单词的词首
#w: 跳N个单词
e: 跳转至后面一个单词的词尾
b: 跳转至前面一个单词的词首
都支持前面加#
行首,行尾跳转:
^跳转至第一个非空白字符,0跳转至绝对行首 
$  跳转至行尾

行间跳转:
#G 跳到第几行
G 直接跳转至文件尾部
末行模式下跳转:
:# 跳转到第几行

翻屏操作:
Ctrl, f 往下翻一屏 
Ctrl, b 往上翻一屏
Ctrl, d 往下翻半屏 
Ctrl, u 往上翻半屏 
翻行 Enter 或者上下键
删除:
x: 删除光标处的一个字符
#x: 从光标所在处往后删除几个字符
X:删除光标前的一个字符
均支持前面加#的用法

d:删除
dw 
d$ 删除光标到行尾的内容  (D)
d0  删除光标到行首的内容
可以结合跳转字符
dd 删除光标所在行
#dd 删除光标所在行往下几行
末行模式下的删除:
地址定界:
ADDR1,ADDR2
.: 表示当前行
$: 表示最后一行
相对地址定界:+#, -#
/PATTERN1/,/PATTERN2/d 删除第一次被模式一匹配到的行(当前行不算)到第一次被模式二匹配到的行中间的行
用法示例:
1,50d (敲回车)删除1-50行
.,$d 删除当前行到最后
1,+5d  删除第一行以下5行,包括第一行
.,-5d 删除从当前行到以上5行
.,$-1 删除当前行到倒数第二行
p:
删除或复制的是整行:在当前光标所在行下方粘贴
删除的单词或行的部分:在当前光标所在处后方粘贴
P:
删除或复制的是整行:在当前光标所在行上方粘贴
删除的单词或行的部分:在当前光标所在处前方粘贴

y:复制 (用法跟粘贴类似)
y: 一般结合w, b, e, ^, 0, $等跳转字符使用
yy: 复制光标所在行
#yy 复制光标所在行到以下几行
支持末行模式定界

可视化模式:
v:按字符选取
V:按行选取

撤消编辑操作:
u: 撤消上一次编辑操作 默认最多可撤销最近50次
#u: 撤销最近N次,只在编辑模式下支持  末行模式下不支持
Ctrl + r:撤消最后的撤消操作

vim搜索:
/keyword
?keyword
使用/keyword时
n 表示跳转到下一个搜索到的内容
N 表示跳转到上一个搜索到的内容
使用?keyword时
n 表示跳转到上一个搜索到的内容
N 表示跳转到下一个搜索到的内容
搜索到的内容高亮显示

查找并替换:
在末行模式下使用s命令
:定界s/查找的内容/替换成的内容/gi
查找的内容:支持正则表达式
替换成的内容:不支持正则表达式,但可使用前向引用
修饰符:
g:全局替换 (不加g只替换匹配到的第一次)
i:忽略大小写
用法示例:
:1,20s/fi/FI/g   1-20行fi替换为FI
:1,20s/\<u...e\>/ABC/g 把1-20行以u开头以e结尾的字符串替换为ABC
:1,20s/\<u\([[:alpha:]]\{3\}e\)\>/U\1/g 把1-20行以u开头后跟3个字母以e结尾的单词前面的u换为U
&:用于引用查找到的整个字符串,例如:
:1,20s/n..e\>/&r/g搜索到匹配到的内容,在其后加r
定界符:
1,$ = %
分隔符可以是任意特殊字符:
一般常用一下几种
/、#、@·····
:%s/^#[[:space:]]*//g删除所有以#开头的行中的#和其后的空格
:%s/[A-Z]//g 删除所有大写字母
末行:
!shell command   可以同shell交互
定界符w /path/to/somewhere  将指定的内容复制到另一个文件中,例如:
:1,50w /root/test/vim.txt  将正在编辑的文件中的1-50行复制到/root/test/vim.txt中

窗口拆分:
Ctrl-w, s:水平拆分 (Ctrl + w 松开之后再按s,下同)
Ctrl-w, v: 垂直拆分
切换窗口
Ctrl-w, ARROW(方向键)
Ctrl-w, q 关闭光标当前所在的窗口

vim打开多个文件:
vim FILE1 FILE2
:next   切换至后一个文件
:prev   切换至前一个文件
:first   切换至第一个一个文件
:last    切换至最后一个文件
wall 同时保存
wqall 同时保存退出
qall! 同时不保存退出

打开多个文件并拆分显示
-o 水平拆分,例如: [root@localhost test]# vim -o rc.sysinit vim.txt
-O 竖直拆分
定制vim的工作属性:(仅对当前vim有效)
:set [no]nu  显示(关闭)行号
:set [no]ai  自动缩进
:set [no]ic  忽略大小写
:syntax on|off 语法高亮
若想长期有效,修改配置文件:
全局配置文件:/etc/vimrc 
个人配置文件:~/.vimrc 不存在 (默认不存在,用时需创建)