Vim 编辑器简介
Vim简介
Vim(Vi IMproved)是由vi(Visual Interface)发展而来,与Emacs并列成为Linux用户最喜欢的文本编辑神器。Vim的第一个版本由布莱姆·米勒在1991年发布。最初的简称是Vi IMitation,随着功能的不断增加,正式名称改成了Vi IMproved。现在是在开放源代码方式下发行的自由软件。下面就说说Vim编辑器的简单操作。
模式匹配
Vim是一个模式化的编辑器,在不同的模式下,相同操作所实现的功能各不相同。
基本模式
- 编辑模式:使用命令,比如
dd
,u
,i
,也称为命令模式; - 输入模式:插入内容,插入键盘输入的内容;
- 末行模式:内置的命令行接口,比如
:set nu
,:wq
;
打开文件
vim [OPTION]... FILE...
+n
打开文件后,直接让光标处于第n行的行首;
比如,打开一个文件,直接进入第12行:
vim +12 /tmp/test.txt
+/PATTERN
打开文件后,直接让光标处于第一个被PATTERN匹配到的行的行首;
比如,打开一个文件,直接进入行尾:
vim + /tmp/test.txt
模式转换
- 编辑模式 --> 输入模式
i
insert, 在光标所在处输入;
a
append, 在光标所在处后面输入;
o
在当前光标所在行的下方打开一个新行;
I
在当前光标所在行的行首输入;
A
在当前光标所在行的行尾输入;
O
在当前光标所在行的上方打开一个新行;
- 输入模式 --> 编辑模式
ESC
- 编辑模式 --> 末行模式
:
- 末行模式 --> 编辑模式
ESC
关闭文件
:q
退出;:q!
强制退出,丢弃做出的修改;:wq
保存退出;:x
保存退出;:w
/PATH/TO/SOMEWHERE 保存或另存为指定文件路径;- 命令模式下执行
ZZ
保存退出;
光标跳转
编辑模式(命令模式)下的光标跳转。
字符间跳转
h
左l
右j
下k
上- 跳转指定个数的字符:
比如:向左跳10个字符
10h
单词间跳转
w
下一个单词的词首;e
当前或下一单词的词尾;b
当前或前一个单词的词首;- 跳转指定个数的单词:
比如:向左跳10个单词
10w
行首行尾跳转
^
跳转至行首的第一个非空白字符;0
跳转至行首;$
跳转至行尾;
行间移动
G
最后一行;1G
,gg
第一行;- 跳转到指定行:
比如,跳转到第10行
10G
句间移动
)
跳转到下一个句子;(
跳转到上一个句子;
段落间移动
}
跳转到下一段落;{
跳转到上一段落;
编辑命令
字符编辑
x
删除光标处的字符;nx
删除光标处起始的n个字符;xp
交换光标所在处的字符及其后面字符的位置;r
替换光标所在处的字符;
删除命令
d
删除命令,可结合光标跳转字符,实现范围删除;d$
删除光标所在处到行尾的内容;d^
删除光标所在处到行首第一个非空白字符的内容;d0
删除光标所在处到行首的内容;dw
删除光标所在处到下一个单词的词首的内容;de
删除光标所在处到当前单词的词尾的内容;db
删除光标所在处到当前或前一个单词的词首的内容;dd
删除光标所在的行;
以上命令都可以使用ncommand
的形式进行批量操作。
ndd
删除光标所在处开始的n行(向下删除);
粘贴命令
使用d
删除的内容也保存在缓冲区,可以用粘贴命令进行粘贴(d
和p
的结合构成了剪切操作)(只粘贴最后一次操作的内容)。
p
缓冲区存的如果为整行,则粘贴当前光标所在行的下方;否则,则粘贴至当前光标所在处的后面;P
缓冲区存的如果为整行,则粘贴当前光标所在行的上方;否则,则粘贴至当前光标所在处的前面(和p
的工作方式相反);
复制命令
y
复制,工作行为相似于d
命令;y$
复制光标所在处到行尾的内容;y0
复制光标所在处到行首的内容;y^
复制光标所在处到行首第一个非空白字符的内容;ye
复制光标所在处到当前单词的词尾的内容;yw
复制光标所在处到下一个单词的词首的内容;yb
复制光标所在处到当前或前一个单词的词首的内容;yy
复制光标所在行;
以上命令都可以使用ncommand
的形式进行批量操作。
nyy
复制光标所在处开始的n行(向下复制);
改变命令
c
修改,工作行为相似于d
命令,不同的是执行c
后,由编辑模式
进入到输入模式
;c$
删除光标所在处到行尾的内容,并进入输入模式
;c^
删除光标所在处到行首第一个非空白字符的内容,并进入输入模式
;c0
删除光标所在处到行首的内容,并进入输入模式
;cb
删除光标所在处到当前或前一个单词的词首的内容,并进入输入模式
;ce
删除光标所在处到当前单词的词尾的内容,并进入输入模式
;cw
删除光标所在处到下一个单词的词首的内容,并进入输入模式
;cc
删除光标所在行,并进入输入模式
;
以上命令都可以使用ncommand
的形式进行批量操作。
ncc
删除光标所在处开始的n行(向下删除),并进入输入模式
;
可视化模式
经常结合编辑命令使用:d
、c
、y
等;
v
按字符选定;V
按行行定;
撤消此前的编辑
u
撤消此前的操作;nu
撤消前n次操作;
撤消此前的撤消(恢复撤销的内容)
Ctrl+r
重复前一个编辑操作
.
翻屏操作
Ctrl+f
向文件尾部翻一屏;Ctrl+b
向文件首部翻一屏;Ctrl+d
向文件尾部翻半屏;Ctrl+u
向文件首部翻半屏;
练习教程
vimtutor
末行模式
vim内建的命令行接口。
地址定界
后跟编辑命令使用:d
、c
、y
等;
w /PATH/TO/SOMEWHERE
将范围内的行另存至指定文件中;
r /PATH/FROM/SOMEFILE
在指定位置插入指定文件中的所有内容;
:1
第1行;:1,100
从1到100行;:1,+3
从第1行开始,向下加3行;:.
当前行;:$
最后一行;:.,$-1
当前行到倒数第2行;:%
全文, 相当于:1,$
;:/pat1/,/pat2/
使用正则,从第一次被pat1模式匹配到的行开始,一直到第一次被pat2匹配到的行结束;
查找
/PATTERN
从当前光标所在处向文件尾部查找;?PATTERN
从当前光标所在处向文件首部查找;n
与命令同方向查找;N
与命令反方向查找;
替换
:s/要查找的内容/替换为的内容/修饰符
分隔符可用其他字符替换;
说明:
- 要查找的内容:可使用模式;
- 替换为的内容:不能使用模式,但可以使用
\1
,\2
, ...等后向引用符号;还可以使用&
引用前面查找时查找到的整个内容; - 修饰符:
i
(忽略大小写),g
(全局替换,默认情况下,每一行只替换第一次出现);
应用:
:.,$s/r(oo)t/R\1T/g
:.,$s#r(oo)t#R\1T#g
把从当前位置到文档结尾的root
全局替换成RooT
。
多文件模式
vim FILE1 FILE2 FILE3 ...
;
:next
下一个;:prev
前一个;:first
第一个;:last
最后一个;:wall
保存所有;:qall
退出所有;:wqall
保存并推出所有;
窗口分隔模式
vim -o|-O FILE1 FILE2 ...
;
-o:
水平分割;-O:
垂直分割;- 在窗口间切换:
Ctrl+w → ← ↑ ↓
;
单文件窗口分割
Ctrl+w s
split,水平分割;Ctrl+w v
vertical,垂直分割;
定制vim的工作特性:
配置文件:永久有效
- 全局:
/etc/vimrc
; - 个人:
~/.vimrc
(自行创建);
末行:当前vim进程有效
- 行号
显示::set number
,简写为:set nu
; 取消显示::set nonumber
,简写为:set nonu
;
- 括号匹配
匹配::set showmatch
,简写为:set sm
; 取消::set nosm
;
- 自动缩进
启用::set ai
; 禁用::set noai
;
- 高亮搜索
启用::set hlsearch
; 禁用::set nohlsearch
;
- 语法高亮
启用::syntax on
; 禁用::syntax off
;
- 忽略字符的大小写
启用::set ic
; 不忽略::set noic
;
获取帮助
:help
:help subject