概念
vi:Visual Interface
vim : VI iMproved
他们都是多模式编辑器,只不过vim是vi的升级版,对vi适用的命令,对vim也同样适用,以下我们适用vi来代表这两种编辑器。
模式
vi编辑器有三种模式:
- 输入模式
- 命令模式
末行模式
三种模式状态的切换:
命令 -》输入
- i: 在当前光标所在字符的前面,转为输入模式
- a: 在当前光标所在字符的后面,转为输入模式
- o: 在当前光标所在行的下方,新建一行,并转为输入模式
- I:在当前光标所在行的行首,转换为输入模式
- A:在当前光标所在行的行尾,转换为输入模式
- O:在当前光标所在行的上方,新建一行,并转为输入模式
输入-》命令
- ESC
命令-》末行
- :(输入冒号切换)
末行-》命令
- ESC,ESC
打开文件
vim /path/to/somefile
vim +# :打开文件,并定位于第#行
vim +:打开文件,定位至最后一行
vim +/PATTERN : 打开文件,定位至第一次被PATTERN匹配到的行的行首
打开后默认处于命令模式
关闭文件
末行模式关闭文件
- :q退出
- :wq 保存并退出
- q!不保存并退出
- w保存
- w!强行保存
命令模式关闭文件
- ZZ 保存并退出
命令模式下移动光标
- 逐字符移动
- h 向左
- j 向下
- k 向上
- l 向右
#h 移动#个字符
以单词为单位移动
- w 移动至下一个单词的词首
- e 跳至当前或下一个单词的词尾
- b 跳至当前或前一个单词的词首
行内跳转
- 0 绝对的行首
- ^ 行首的第一个非空白字符
$ 绝对的行尾
行间跳转
- #G 跳转至第#行
- G最后一行
末行模式下直接给出行号
翻屏
Ctrl + f 向下翻一屏
- Ctrl + b向上翻一屏
- Ctrl + d向下翻半屏
- Ctrl + u向上翻半屏
删除
- 删除单个字符
- 删除光标所在处的单个字符
- #x删除光标所在处及向后的#个字符
.,.+2d删除光标所在行到下2行全部删除(删除三行)
删除命令d
- 命令跟跳转命令组合使用:#dw, #de, #db
- dd 删除当前光标所在行
#dd 删除包括当前光标所在行内的#行
末行模式下 删除指定部分
格式: 删除的第一行,删除的最后一行d
. 代表当前航
$ 代表最后一行
+#向下的#行
黏贴命令
- p 如果删除或复制为整行内容,则粘贴至光标所在行的下方,如果复制或删除的内容为非整行,则粘贴至光标所在字符的后面;
- P 如果删除或复制为整行内容,则粘贴至光标所在行的上方,如果复制或删除的内容为非整行,则粘贴至光标所在字符的前面;
复制命令
- y 用法同d命令
撤销编辑
- 撤销前一次的编辑操作
- #直接撤销最近#次编辑操作
查找操作
- /PATTERN 往下查找
- ?PATTERN 往前查找
在输入n向下查看查找结果,N向上查看查找结果
查找操作一般与替换操作连用
查找替换
在末行模式下使用s
格式1:ADDR1,ADDR2s@PATTERN@string@gi
格式2:ADDR1,ADDR2s/PATTERN/string/gi
ADDR1:要替换的首行
ADDR2:要替换的尾行
s :替换命令
PATTERN: 匹配的字符串
string:要替换的字符串
g:全局替换
i :忽略大小写(不忽略时,不用加这个命令)
1,$ 代表从第一行到最后一行也可以用%代替
%代表全文
与shell交互
当在vi编辑中需要执行一些外部命令的时候,不用退出当前文本编辑,直接使用下面的命令,就可以执行shell中的命令
:!命令
编辑器样式设置
- 显示行号 :set nu
- 取消行号 :set nonu
- 区分大小写 :set ic
- 不区分大小写 :set noic
- 自动缩进 :set ai
- 取消缩进 :set noai
- 查找到的文本高亮显示 :set hlsearch
- 查找到的文本不高亮显示 :set nohlsearch
- 语法高亮 :syntax on
语法不高亮显示 :syntax off
以上设置可以在当前vi编辑器中设置,但只对当次打开编辑器有作用,若永久起作用,可以设置在vi 、vim的配置文件中:
/etc/vimrc
/dtc/virc