所有的 Unix Like 系统都会内建 vi 文书编辑器,其他的文书编辑器则不一定会存在。在Linux的最小化安装中不包含vim,但是目前我们使用比较多的是 vim 编辑器,所以需要安装后使用。vim 具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性,方便程序设计。
Vim 是从 vi 发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。简单的来说, vi 是老式的字处理器,不过功能已经很齐全了,但是还是有可以进步的地方。 vim 则可以说是程序开发者的一项很好用的工具。
vi/vim 的使用
基本上 vi/vim 共分为三种模式,分别是命令模式(Command mode),输入模式(Insert mode)和底线命令模式(Last line mode)。 这三种模式的作用分别是:
1.命令模式
用户使用vi命令进入刚刚的时候就是命令模式。此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。比如我们此时按下i,并不会输入一个字符,i被当作了一个命令。
在命令模式下有些常用的命令:
ZZ 保存退出
ZQ 不保存退出
i 切换到输入模式,以输入字符。
H:页首
M:页中间行
L:页底
zt:将光标所在当前行移到屏幕顶端
2zz:将光标所在当前行移到屏幕中间
zb:将光标所在当前行移到屏幕底端
w:下一个单词的词首
e:当前或下一单词的词尾
b:当前或前一个单词的词首
x 剪切光标处的字符
#x 剪切光标处起始的#个字符
xp 交换光标所在处的字符及其后面字符的位置
~ 转换大小写
J(大写) 删除当前行后的换行符
替换命令(replace)
r 只替换光标所在处的一个字符
R 切换成REPLACE模式(在末行出现-- REPLACE -- 提示),按ESC回到命令模式
删除命令(delete)
d 删除命令,可结合光标跳转字符,实现范围删除
d$ 删除到行尾
d^ 删除到非空行首
d0 删除到行首
dw 下一个单词的词首
de 当前或下一个单词的词尾
db 当前或上一个单词的词首
dd: 剪切光标所在的行
#dd 多行删除
D:从当前光标位置一直删除到行尾,等同于d$
复制命令(yank)
y 复制,行为相似于d命令
y$ 复制到行尾
y0 复制到行首
y^ 复制到非空行首
ye 当前或下一个单词的词尾
yw 下一个单词的词首
yb 当前或上一个单词的词首
yy:复制行
#yy 复制多行
Y:复制整行
粘贴命令(paste)
p 缓冲区存的如果为整行,则粘贴当前光标所在行的下方;否则,则粘贴至当前光标所在处的后面。
P 缓冲区存的如果为整行,则粘贴当前光标所在行的上方;否则,则粘贴至当前光标所在处的前面。
撤消更改
u 撤销最近的更改,相当于windows中ctrl+z
#u 撤销之前多次更改
U 撤消光标落在这行后所有此行的更改
Ctrl-r 重做最后的“撤消”更改,相当于windows中crtl+y
. 重复前一个操作
#. 重复前一个操作#次
2.输入模式
输入模式: 使 Vim 进行输入模式的方式是在命令模式状态下输入 i、I、a、A、o、O 等插入命令(各指令的具体功能如表 3 所示),当编辑文件完成后按 Esc 键即可返回命令模式。
快捷键 | 功能描述 |
---|---|
i | 在当前光标所在位置插入随后输入的文本,光标后的文本相应向右移动 |
I | 行首插入命令 |
o | 在光标所在行的下面插入新的一行。光标停在空行首,等待输入文本 |
O | 在光标所在行的上面插入新的一行。光标停在空行的行首,等待输入文本 |
a | 在当前光标所在位置之后插入随后输入的文本 |
A | 行尾插入命令 |
3.末行模式
末行模式:文件中的指定内容执行保存、查找或替换等操作。使 Vim 切换到编辑模式的方法是在命令模式状态下按“:”(英文冒号)键,此时 Vim 窗口的左下方出现一个“:”符号,这是就可以输入相关指令进行操作了。
# #具体第#行,例如2表示第2行
#,# #从左侧#表示起始行,到右侧#表示结尾行
#,+# #从左侧#表示的起始行,加上右侧#表示的行数,范例:2,+3 表示2到5行
. #当前行
$ #最后一行
.,$-1 #当前行到倒数第二行
% #全文, 相当于1,$
/pattern/ #从当前行向下查找,直到匹配pattern的第一行,即:正则表达式
/pat1/,/pat2/ #从第一次被pat1模式匹配到的行开始,一直到第一次被pat2匹配到的行结束
#,/pat/ #从指定行开始,一直找到第一个匹配pattern的行结束
/pat/,$ #向下找到第一个匹配patttern的行到整个文件的结尾的所有行
d #删除
y #复制
w file #将范围内的行另存至指定文件中
r file #在指定位置插入指定文件中的所有内容
查找并替换
格式:
范围 s/要查找的内容/替换的内容/g
说明:
要查找的内容:可使用基本正则表达式模式
替换为的内容:不能使用模式,但可以使用\1, \2, ...等后向引用符号;还可以使用“&”引用前面查找时查
找到的整个内容
修饰符:
i #忽略大小写
g #全局替换,默认情况下,每一行只替换第一次出现
c #全局替换,每次替换前询问
查找替换中的分隔符/可替换为其它字符,如:#,@
范例:
s@/etc@/var@g
s#/boot#/#i
显示行号
显示:set number,简写 set nu
取消显示:set nonumber, 简写 set nonu
忽略大小写
启用:set ignorecase,简写 set ic
不忽略:set noic
自动缩进
启用:set autoindent,简写 set ai
禁用:set noai
复制保留格式
启用:set paste
禁用:set nopaste
显示隐藏字符
显示Tab ^I和换行符 和$显示
启用:set list
禁用:set nolist
tab用指定空格的个数代替
启用:set tabstop=# 指定#个空格代替Tab
简写:set ts=4
设置光标所在行的标识线
启用:set cursorline,简写 set cul
禁用:set nocursorline
加密
启用: set key=password
禁用: set key=
set 帮助
set all