为什么要学vim
所有的Unix-like 系统都会内建vi文本编辑器,其他的文本编辑器则不一定会存在;
很多个别软件的编辑接口都会主动呼叫vi(例如:crontab、visudo、edquota);
vim是vi的进阶版,具有程序编辑能力,例如 shell script、C program ,可以主动地以字体颜色辨别语法的正确性;
vim还可以用不同的颜色或底线等方式来显示一些特殊的信息。
因为有太多Linux上面的命令都默认使用vi作为数据编辑的接口,所以必须得学会vi,否则很多命令就无法进行操作;另外,vim是vi的高级版本,又可以用颜色或下划线的方式显示一些特殊的信息;因此,现在我们选择功能更为强大的vim。
vim与vi的区别:
1、多级撤销。在vi中按u只能撤销上次命令,而在vim中可以无限制的撤销。
2、易用性。vi只能用于Unix中,而vim可以在Unix,Windows,Mac等多操作平台
3、语法加亮。Vim可以用不同的颜色加亮你的代码
4、可视化操作。就是说vim不仅可以在终端运行,也可以运行于x window、Mac OS、Windows。
5、对于vi的完全兼容。某些情况下,你可以把vim当成vi来使用
vim的三种基本模式
一般命令模式: 可以进行复制、粘贴、删除等操作
编辑模式: 编辑文件的内容,在命令模式下输入i、a、o(I、A、O)等任意一个键即可进入编辑模式
末行模式 / 命令行模式: 保存 / 退出文档,或者设置各种编辑环境
简单执行范例
1、vim编辑器的启动
1、直接进入编辑环境
[root@localhost ~]# vim
2、使用【vim filename】进入编辑环境并打开(新建)文件
[root@localhost ~]# vim text
2、在命令模式下按【i】键进入编辑模式
3、按下【Esc】键回到一般命令模式
4、vim编辑器的退出
1、退出vim编辑环境
:q 退出
:wq 保存退出
2、放弃对文件的更改并退出编辑器
:q!
一、进入编辑模式按键操作
按键
说明
i
在当前光标处进入插入状态
a
在当前光标后进入插入状态
A
将光标移动到当前行的行末,并进入插入模式
o
在当前行的下面插入新行,光标移动到新行的行首,进入插入状态
O
在当前行的上面插入新行,光标移动到新行的行首,进入插入状态
二、一般命令模式的常见操作
1. 行内快速跳转
操作键
功能
^
将光标快速跳转到本行的行首字符
$
将光标快速跳转到本行的行尾字符
w
将光标快速跳转到当前光标所在的位置的后一个单词的首字母
b
将光标快速跳转到当前光标所在位置的前一个单词的首字母
e
将光标快速跳转到当前光标所在位置的后一个单词的尾字母
方向键
进行上下左右方向的光标移动
Home
快速定位到光标到行首
End
快速定位到光标到行尾
2. 行间快速跳转
命令
功能
:set nu
在编辑器中显示行号
:set nonu
取消编辑器行号显示
1G
跳转到文件的行首
G
跳转到文件的末尾行
nG
跳转到文件中的第n行
PageUp
进行文本的向上翻页
PageDown
进行文本的向下翻页
3. 文件内容的删除
命令
功能
x
删除光标处的单个字符 =delete
dd
删除光标所在行 ndd可以删除n行内容
dw
删除当前字符到单词尾(包括空格)的所有字符
de
删除当前字符到单词尾(不包括单词尾部的空格)的所有字符
d$
删除当前字符到行尾的所有字符
d^
删除当前字符到行首的所有字符
J
删除光标所在行行尾的换行符,相当于合并当前行和下一行的内容
4. 文件内容的撤销
命令
功能
u
取消最近一次的操作,并恢复操作结果;可以多次使用命令恢复已进行的多步操作
U
取消对当前行的所有操作
Ctrl + r
对使用u命令撤销的操作进行恢复
5. 文件内容的复制和粘贴
命令
功能
yy
复制当前行整行的内容
nyy
从当前行开始复制n行
yG
复制当前行到最后一行的所有数据
y1G
复制当前行到第一行的所有数据
p
将已复制的数据在光标下一行粘贴
三、命令行模式的常见操作
1. 文件的保存与退出
命令
说明
:w
将编辑的数据写入硬盘文件中,即保存
:w!
强制写入硬盘文件
:q
退出vi / vim
:q!
强制退出不保存
:wq
保存后退出,若为 :wq! 则为强制保存后退出
:w [filename]
将编辑的数据保存成另一个【filename】文件
:r [filename]
将【filename】文件内容追加到当前文件的光标所在行后面
2. 文件内容的查找
命令
功能
/word
从上而下在文件中查找字符串 “word”
?word
从下而上在文件中查找字符串 “word”
n
定位下一位匹配的被查找字符串
N
定位上一位匹配的被查找字符串
3. 文件内容的替换
命令
功能
: s/old/new
将当前行中查找到的第一个字符串 “old” 替换为 “new”
: s/old/new/g
将当前行中查找到的所有字符串 “old” 替换为 “new”
:#,#s/old/new/g
在行号 " #,# " 范围内替换所有的字符串 "old" 为 "new"
:%s/old/new/g
在整个文件范围内替换所有的字符串 "old" 为 "new"
: s/old/new/c
在替换命令末尾加入c命令,将对每个替换动作提示用户进行确认
4. 自定义vim使用环境
命令
功能
:set nu
在文档中显示行号
:set nonu
与 :set nu 相反,为取消显示行号
四、多文件、多窗口编辑
假如有两个或者多个文件需要对比观看,我们要一个接一个的打开对照吗?这种做法显然是效率低下的,这时采用多文件、多窗口编辑的功能就能极大地提高效率。
1、首先用【vim filename】打开一个文件
[root@localhost ~]# vim /etc/passwd
2、在当前文件下进入命令行模式输入【:sp filename】打开另一个文件
$:sp /etc/shadow
效果如下图:
多窗口下的操作
操作键
功能
:sp filename
打开一个新窗口,加入filename文件
ctrl+w+方向下键
将光标移动到下方的窗口
crtl+w+方向上键
将光标移动到上面的窗口
:qa
退出所有文件
五、vim环境设置与记录:~/.vimrc、 ~/.viminfo
说明:
~/.viminfo:vim会主动的将你曾经做过的操作记录下来,保存到 ~/.viminfo文件
~/.vimrc:整体vim的设定值一般是放置在 /etc/vimrc这个文件,不过,不建议你修改它!但是可以修改 ~/.vimrc这个文件(预设不存在,需要自行手动建立),将你所希望的环境设定值写入。举例如下:
[root@localhost ~]# vim ~/.vimrc
set nu#可以在每一行的最前面显示行号
set hlsearch#高亮度反白
set autoindent#自动缩进
set backspace=2#可随时用退格键删除
set ruler#可显示最后一行的状态
set showmode#左下角那一行的状态
set bg=dark#显示不同的底色色调
syntax on#进行语法检验,颜色显示
六、语系编码转换(中文编码问题)
有很多朋友经常会碰到 vim 编辑器里面显示中文乱码的问题,这其实很可能是因为编码的问题。中文编码常用的有Big5、GBK、UTF-8等几种,如果你的文件使用的是GBK编码,但在vim的终端界面中使用的是UTF-8,由于编码的不同(字符集不同),中文就会显示成一堆乱码。
iconv命令:用于编码转换
命令格式:iconv -f 原始编码 -t 输出编码 原文件名 -o 输出文件名
参数
说明
-f
–from-code = 名称 原始编码
-t
–to-code = 输出编码
-o
–output = FILE 输出文件名
案例演示:
在windows下创建一个含有中文的文件aaa.txt,并传给Linux(这里可以通过MobaXterm_CHS传输),回到Linux系统中打开显示是中文乱码,这时我们使用iconv编码转换,并输出为bbb.txt。
[root@localhost a]# iconv -f GBK -t utf8 aaa.txt -o bbb.txt
编码转换前:
编码转换后:
注:
windows中记事本默认字符集是ANSI 可以通过另存为右下角查看
如果是中文操作系统指的ANSI就是指的是 GBK
七、写在最后:
vim入门很简单,但是其实不是那么好学的,因为它的功能十分强大,支撑起Linux的半壁江山。因此,我们在平时要多看、多练,才能成为一名合格的Linux系统的维护者。
好了,如果对你有所帮助的话,就是对博主创作的最好支持!如有不足,还请雅正!