在这天地间,流传这两大神器的故事:据说Emacs是神的编辑器,而Vim是编辑器之神。正所谓,工欲善其事,必先利其器。今天就和大家分享一下关于编辑器之神Vim的传说。
一、Vim的历史
1.下图是关于几款主流编辑器的学习曲线:(注:图片来自互联网)
2.VIM - Vi IMproved
3.上图中vi即是vim的前身
- VI:Visual Interface
4.VIM和VI是文本编辑器
- 何为文本文件?
- 文本文件一般指只有字符原生编码构成的二进制计算机文件,与富文本相比,其不包含字样样式的控制元素,能够被最简单的文本编辑器直接读取
- 文本文件常见的格式?
- ASCII、MIME、.txt、...
- 那么,何为文本编辑器?
- 文本编辑器是计算机软件中的一种。主要用于用来编写和查看文本文件。
- 文本编辑器的种类:
- 行编辑器:sed
- 全屏编辑器:nano、vi、vim
二、Vim编辑器的基本操作
1. 基本操作
-
VIM:模式化的编辑器
-
基本模式
- 编辑模式 (命令模式)
- 输入模式 (插入模式)
- 末行模式 (vim内置的命令行接口)
- Note:打开的时候默认的模式是编辑模式
-
打开文件
# vim [OPTION]... FILE...
+#
:打开文件后,直接让光标处于第#行的行首+/PATTERN
:打开文件后,直接让光标处于第一个被PATTERN匹配到的行的行首;
-
模式转换
- 模式转换:
- 编辑模式 - - > 输入模式
i
:insert,在光标所在处前面插入;a
:append,在光标所在处的后面插入;o
:open,在当前光标所在行的下一行打开新行,并转换为输入模式;I
:在当前光标所在行的行首输入;A
:在当前光标所在行的行尾输入;O
:在光标所在行的上一行打开一个新行,并转换为输入模式;
- 输入模式 - - > 编辑模式
ESC
- 编辑模式 - - > 末行模式
:
- 末行模式 - - > 编辑模式
ESC
- 关闭文件
:q
:退出:!
:强制退出,丢弃做出的修改;:wq
:保存退出;:x
:保存退出;:w /PATH/TO/SOMEWHERE
:当前编辑的文本保存到别的文件;ZZ
:保存退出;
- 编辑模式 - - > 输入模式
- 图示说明如下: (转载请注明出处)
2. 光标跳转:
- 字符间跳转:
h,j,k,l
h
:左l
:右k
:上j
:下
#COMMAND
:跳转由#指定的个数的字符;
- 单词间跳转:
w
:跳转至下一个单词或后一个单词的词首;e
:跳转至当前或下一个单词的词尾;b
:跳转至当前或下一个单词的词首;#COMMAND
:由#指定一次跳转的单词数;
- 行首行尾跳转:
^
:跳转至行首的第一个非空白字符;0
:跳转至绝对的行首;$
:跳转至绝对行尾;
- 行间移动:
#G
:跳转至由#指定行;G
:跳转至最后一行;1G
,gg
:跳转至第一行;
- 句间移动:
)
:跳转至下一个句子;(
:跳转至上一个句子;
- 段落间移动:
}
:跳转至下一段{
:跳转至上一段
3. vim的编辑命令:
- 字符编辑:
x
:删除光标处的单个字符;#x
:删除光标处起始的#个字符;xp
:交换光标所在处的字符及其后面字符的位置;
- 替换命令:
r
,replacer
:替换光标所在处的字符;(单字符替换)
- 删除命令:
d
:删除命令,可结合光标跳转字符,实现范围删除;d$
:删除至绝对行尾d^
:删除至行首的第一个非空白字符d0
:删除至绝对行首
dd
:删除光标所在行;#dd
:向下删除#行;
- 粘贴命令:
- (
p
,put,paste) p
:缓冲区中存储的如果为整行内容,则粘贴至当前光标所在行的下方;否则,则粘贴至当前光标所在处的后面;P
:缓冲区中存储的如果为整行内容,则粘贴至当前光标所在行的上方;否则,则粘贴至当前光标所在处的前面;
- (
- 复制命令:
y
,yanky
:复制,工作行行为相似于d命令;y$
:复制至绝对行尾y0
:复制至绝对行首y^
:复制至行首的第一个非空白字符yy
:复制整行#yy
:复制多行;
- 改变命令:
c
,changec
:修改- 编辑模式 - -> 输入模式
cc
:删除并输入新内容#cc
:一次删除#行
三、其它编辑操作
1.可视化模式
v
:按字符选定V
:按行选定- Note:经常结合编辑命令;
2. 撤销此前的编辑:
u
(undo):撤销此前的操作;#u
:撤销指定次数的操作;
- 撤销此前的撤销:
- Ctrl+r
- 重复前一个编辑操作:
.
四、翻屏操作
-
Ctrl+f
:向文件尾部翻一屏; -
Ctrl+b
:向文件首部翻一屏; -
Ctrl+d
:向文件尾部翻半屏; -
Ctrl+u
:向文件首部翻半屏; -
vim自带的练习教程:
vimtutor
五、vim的末行模式
- 内建的命令行接口;
- 特性:
- (1). 地址定界
:start_pos,end_pos
#:
具体的第#行,例如:2表示第2行;#,#
:从左侧#表示起始,到右侧#表示结束;#,+#
:从左侧#表示的行开始,加上右侧#表示的行数;.
当前行;$
:最后一行;%
:全文;相当于(1,$)/pat1/,/pat2/
:表示从第一次被pat1匹配到的行开始,一直到pat2匹配到的行结束- 使用方式:
- 后跟一个编辑命令:
d
:删除指定范围的内容y
:复制指定范围的内容w /PATH/TO/SOMEWHERE
:将范围内的行另存至指定文件中;r /PATH/FROM/SOMEFILE
:在指定位置插入指定文件中的所有内容;
- 后跟一个编辑命令:
- (2). 查找
/PATTERN
:从当前光标所在处向文件尾部查找?PATTERN
:从当前光标所在处向文件首部查找n
:与命令同方向;N
:与命令反方向;
- (3). 查找并替换
s
:在末行模式下完成查找替换操作s/要查找的内容/替换为的内容/修饰符
- 要查找的内容:可使用模式;
- 替换为的内容:不能使用模式,但可以使用\1, \2, ...等后向引用符号;好可以使用
"&"
引用前面查找时查找到的整个内容; - 修饰符:
i
:忽略大小写g
:全局替换;默认情况下,没一行只替换第一次出现的内容;
- 查找替换中的分隔符
/
可替换为其它字符,例如:s@@@
s###
六、vim的文件模式
1. 多文件模式
- vim FILE1 FILE2 FILE3 ...
:next
切换至下一个文本:prev
切换至前一个文本:first
切换至前一个文本:last
切换至最后一个文本:wall
保存所有:qall
退出所有
2. 窗口分隔模式
- vim -o|-O FILE1 FILE2 ...
-o
:水平分割-O
:垂直分割- 在窗口间切换:
Ctrl+w,Arrow
3. 单文件窗口分割:
Ctrl+w,s
:split,水平分割Ctrl+w,v
:vertical,垂直分割
4. 定制vim的工作特性:
- 配置文件:(永久有效)
- 全局:
/etc/vimrc
- 个人:
~/.vimrc
(默认不存在,需要自己创建)
- 全局:
- 末行:(当前vim进程有效)
- (1) 行号:
- 显示:
set number
,简写为:set nu
- 取消显示:
set nonumber
,简写为:set nonu
- 显示:
- (2) 括号匹配:
- 匹配:
set showmatch
,简写为:set sm
- 取消匹配:
set nosm
- 匹配:
- (3) 自动缩进:
- 开启:
set ai
- 禁用:
set noai
- 开启:
- (4) 高亮搜索
- 开启:
set hlsearch
- 禁用:
set nohlsearch
- 开启:
- (5) 语法高亮
- 开启:
syntax on
- 禁用:
syntax off
- 开启:
- (6) 忽略字符大小写
- 启用:
set ic
- 禁用:
set noic
- 启用:
5. 书籍推荐:《Vim-handbook-cn-72》
6. 获取帮助
- 在末行模式下:
help SUBJECT
来源:oschina
链接:https://my.oschina.net/u/2471137/blog/666626