在Linux系统中有两款编辑器不得不说,一款是emacs据说是神的编辑器,一款是vi据说是编辑器的之神。Emacs的作者是richard stallman和vi的作者是bill joy,它们都是那个时代的著名黑客。所以这两款编辑器一开始面向的主要用户就是写程序的人,而且现在也是,将来还是。
本文主要介绍vi,作者Bill joy与1976年使用C语言创造了它,已经行走江湖四十余载,是unix世界里文本编辑器的老大。而我们在Linux上很少使用纯正的vi,而是它的加强版vim。不过不用担心它们的用法基本没有区别,只是vim更加人性化所以更受欢迎。
vim:visual interface improve可视化接口增强版
1) vim的模式:在vim中有三个模式分别是编辑模式、命令模式、末行模式,下面是介绍模式之间的转换(默认进入vim的命令模式)
1.1 命令模式到编辑模式
1 2 3 4 5 6 |
i #输入i,在当前光标所在字符的前面转换为输入模式 a #输入a,在当前光标所在字符的后面转换为输入模式 o #输入o,在当前光标所在行的下一行转换为输入模式 I #输入I,在当前光标所在行的行首转换为输入模式 A #输入A,在当前光标所在行的行尾转换为输入模式 O #输入O,在当前光标所在行的上一行转换为输入模式 |
1.2 编辑模式到命令模式
1 |
ESC #按ESC键从编辑模式到命令模式 |
1.3 命令模式到末行模式
1 |
: #冒号直接进入到末行模式,但只能从编辑模式进入,不能从命令模式进入 |
1.4 末行模式到命令模式
1 |
ESC #按ESC键,从末行模式到命令模式 |
2)vim [OPTION] FILE:打开文件
1 2 |
vim +10 file #打开文件并快速定位到第10行 vim + file #打开并定位到最后一行 |
3) Vim中关闭文件
3.1 末行模式
1 2 3 4 5 6 |
:q #退出 :wq #保存退出 :x #保存退出 :q! #强制退出 :w #保存 :w! #强制保存 |
3.2 命令模式
1 |
ZZ #保存退出 |
4) vim中移动光标(命令模式)
4.1 逐字符移动
1 2 3 4 5 6 7 8 |
h #向左移动 j #向下移动 k #向上移动 l #向右移动 #h #向左移动#个字符(#表示数字) #j #向下移动#个字符(#表示数字) #k #想上移动#个字符(#表示数字) #l #想右移动#个字符(#表示数字) |
4.2 以单词为单位移动
1 2 3 4 5 6 |
w #跳至下一个单词的词首,以行为单位 e #跳至当前或下一个单词的词尾 b #跳至当前或上一个单词的词首 #w #跳至第#个单词的词首,以行为单位 #e #向后跳至第#个单词的词尾 #b #向前跳至第#个单词的词首 |
4.3 行内跳转
1 2 3 |
0 #跳转至行首 ^ #行首的非空白字符 $ #跳转至行尾 |
4.4 行间跳转
1 2 3 4 |
G #跳转至最后一行 gg #跳转至第一行 #G #跳转至#行 :6 #在末行模式,行间跳转直接给出行号回车就行 |
5) 翻屛
1 2 3 4 |
Ctrl+f #向下翻一屏 Ctrl+b #向上翻一屏 Ctrl+d #向下翻半屏 Ctrl+u #向下翻半屏 |
6) 删除单个字符
6.1 命令模式
1 2 |
x #删除光标所在处的单个字符 #x #删除光标所在处向后的#个字符 |
6.2 编辑模式
1 |
delete #删除键,一次删除一个字符,或者退格键 |
7) 删除命令
7.1 命令模式
1 2 3 4 5 6 7 |
d$ #从当前光标删除到当前行末 dG #删除当前行之后所有的行 dw #删除光标所在处的整个单词向后字符连同空格 de #删除光标所在处的整个单词中向前字符不包括空格 #dw #删除#个字符 dd #删除光标所在行 #dd #删除光标所在行向下#行 |
7.2 末行模式
1 2 3 4 5 |
:1,10d #删除1到10行 :.d #删除当前行 :$d #删除最后一行 :#d #删除第#行 :.,$d #删除当前行之后所有的行 |
8) 复制命令
1 2 |
yy #复制光标所在的当前行 #yy #复制光标所在行向下#行 |
9) 粘贴命令
1 2 |
p #如果删除或复制的内容为整行则粘贴至光标所在行的下方 P #如果删除或复制的内容为整行则粘贴至光标所在行的上方 |
10)替换(命令模式)
1 2 |
r #替换单个字符 R #进入替换模式,可进行多次替换 |
11)撤销(命令模式)
1 2 |
u #撤销此前的操作 Ctrl+r #还原最近一次的撤销操作 |
12)可视化视图(命令模式)
1 2 3 |
v #进入可视化模式,可以进行按字符选取,但是是横向选取 ctrl+v #进入可视化模式,可以进行按字符选取,但是是纵向选取 V #进入可视化模式,可以进行按行选取 |
进入可视化模式之后就可以进行批量操作,比如注释(在行首添加#)多行数据,操作先按Ctrl+r进入可视化模式,选取多行,然后按shift+i进入到编辑模式,然后就可以输入#号,然后按Esc就会发现刚刚选取的多行都已经添加了#号。如要删除多个字符按d就可以了,我基本都是批量添加字符或删除字符。更多操作自己研究。
13) 查找(命令模式)
1 2 |
/pattern #从首部往尾部查找 ?pattern #从尾部往首部查找 |
14) 查找并替换(末行模式)
1 2 3 |
:ADD,CMD #同sed中替换命令一样 :1,10s@root@user@gi #把1到10行中所有的root都换成user并忽略大小写 :%s@http://www\.example\.com@yum\.com@ #%号全文替换\是转义 |
15) Vim一次编辑多个文件(末行模式)
1 2 3 4 5 6 |
:vim FILE1 FILE2 #进行多文件编辑 :next #切换至下一个文件 :prev #切换至前一个文件 :last #切换至最后一个文件 :first #切换至第一个文件 :qa #全部文件退出 |
16) 分屏显示文件(命令模式)
1 2 3 4 |
Ctrl+w,松开在按s #水平拆分文件 Ctrl+w,松开在按v #垂直拆分文件 Ctrl+w,松开在按ARROW #在窗口之间来回切换文件 qa #关闭全部窗口 |
17) 分窗口示多个文件
1 2 |
vim -o FILE1 FILE2 #水平切割文件 vim -O FILE1 FILE2 #垂直切割文件 |
1 2 3 4 5 |
:next #切换至下一个文件 :prev #切换至前一个文件 :last #切换至最后一个文件 :first #切换至第一个文件 :qa #全部文件退出 |
18)将当前文件内容保存到另一个文件(末行模式)
1 |
1,10w /PATH |
19)将另外一个文件的内容填充到当前文件中(末行模式)
1 |
r /PATH |
20)跟shell交互(末行模式)
1 |
! cat /etc/issue |
21) vim高级内容(末行模式只对当前生效)
21.1 显示行号
1 2 |
set nu #显示行号 set nonu #撤销行号 |
21.2 忽略大小写
1 2 3 |
set ignorecase set ic set noic |
21.3 自动缩进
1 2 3 |
set autoindent set ai set noai |
21.4 查找到的文本高亮显示或取消
1 2 |
set hlsearch #开启高亮 set nohlsearch #关闭高亮 |
21.5 语法高亮
1 2 |
syntax on #开启语法高亮 syntax off #关闭语法高亮 |
21.6 显示非打印字符
1 |
Set list |
22)VIM配置文件
1 2 |
/etc/vimrc #全局配置文件,可以调整vim的高级设置 ~/.vimrc #只对当前用户生效 |
PS:vim编辑文件非法退出再次打开文件时报错解决方法;在家目录下回产生一个隐藏文件*.swp的文件;我们手动删除就可以解决再次打开文件报错问题