Vim是从 vi 发展出来的一个文本编辑器。 vi 是老式的字处理器,不过功能已经很齐全了,但是还是有可以进步的地方。 vim 则可以说是程序开发者的一项很好用的工具代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。
基本上vim共分为三种模式,分别是一般模式、编辑模式、指令列命令模式(也称末行模式)。 这三种模式的作用分别是:
一般模式:
以 vi 打开一个档案就直接进入一般模式了(也是默认的模式)。在这个模式中, 你可以使用(上下左右)按键来移动光标,你可以使用(删除字符)或(删除整行)来处理档案内容, 也可以使用(复制、贴上)来处理你的文件数据。
编辑模式:
在一般模式中可以进行删除、复制、贴上等等的动作,但是却无法编辑文件内容的! 要等到你按下(i, I, o, O, a, A, r, R)等任何一个字母之后才会进入编辑模式。注意:通常在Linux 中,按下这些按键时,在画面的左下方会出现INSERT 或 REPLACE 的字样,此时才可以进行编辑。而如果要回到一般模式时, 则必须要按下Esc这个按键即可退出编辑模式。
指令列命令模式(或末行模式):
在一般模式当中,输入( : / ? )三个中的任何一个按钮,就可以将光标移动到最底下那一行。在这个模式当中,可以提供你搜寻资料的动作,而读取、存盘、大量取代字符、开vi、显示行号等等的动作。
用下图简要体现一下上面的描述:
常用操作指引:
移动光标移动
h 或 向左箭头键(←):光标向左移动一个字符
j 或 向下箭头键(↓):光标向下移动一个字符
k 或 向上箭头键(↑):光标向上移动一个字符
l 或 向右箭头键(→):光标向右移动一个字符
[Ctrl] + [f]:屏幕向下移动一页,相当于 [Page Down]按键 (常用)
[Ctrl] + [b]:屏幕向上移动一页,相当于 [Page Up] 按键 (常用)
[Ctrl] + [d]:屏幕向下移动半页
[Ctrl] + [u]:屏幕『向上』移动半页
+:光标移动到非空格符的下一列
-:光标移动到非空格符的上一列
H:光标移动这个屏幕的最上方那一行的第一个字符
M:光标移动到这个屏幕的中央那一行的第一个字符
L:光标移动到这个屏幕的最下方那一行的第一个字符
G:移动到这个档案的最后一行
gg:移动到第一行,相当于1G
搜寻与取代
/PATTERN:向下查找字符串。
?PATTERN:向上查找一个字符
:n1,n2s/PATTERN1/PATTERN2/g,n1 与 n2 为数字。在第 n1 与 n2 行之间寻找PATTERN1这个字符串,并将该字符串取代为PATTERN2;
示例:在/tmp/log/a.t文件在1到20行之间搜寻umask并取代为Umask则:
:1,20s/umask/UMASK/g
:1,$s/PATTERN1/PATTERN2/g,从第一行到最后一行寻找 PATTERN1字符串,并将该字符串取代为PATTERN2
:1,$s/PATTERN1/PATTERN2/gc,从第一行到最后一行寻找PATTERN1 字符串,并将该字符串取代为PATTERN2且在取代前显示提示字符给用户确认 (confirm) 是否需要取代
删除、复制与贴上
x, X:x向后删除一个字符,X向前删除一个字符,nx,连续向后删除 n 个字符(n表示数值)
dd:删除所在的行。ndd,向下删除 n 行。
d1G:删除光标所在到第一行的所有数据
dG:删除光标所在到最后一行的所有数据
d$:删除光标所在到该行的最后一个字符
d0:删除光标所在到该行的最前面一个字符
yy:复制光标所在的行,nyy复制光标向下 n 行
y1G:复制光标所在行到第一行的所有数据
yG:复制光标所在行到最后一行的所有数据
y0:复制光标所在的那个字符到该行行首的所有数据
y$:复制光标所在的那个字符到该行行尾的所有数据
p, P:p将已复制的数据在光标下一行贴上,P 则为贴在光标标上一行
u:撤销前一个动作
.:重做上一个动作
行末:$
行首:^
空格:\s
行末空格:\s\+$
行首空格:^\+\s
进入插入或取代的编辑模式
i, I:进入插入模式(Insert mode):i从当前光标位置插入, I 当前前所在行的第一个非空格符处开始插入
a, A:进入插入模式(Insert mode):a 从当前光标位置下一个字符处开始插入; A 在光标所在行的最后一个字符处开始插入
o, O:进入插入模式(Insert mode):o 从当前光标所在的下一行处插入新的一行; O 在当前光标所在处的上一行插入新的一行
r, R:进入取代模式(Replace mode):r 在光标所在的那一个字符替换或取代一次;R会一直取代光标所在的文字,直到按下 ESC 为止
上面这些按键在编辑模式下,左下角处会出现『--INSERT--』或『--REPLACE--』的字样。
[Esc]:退出编辑模式
保存、离开等命令
:w:将编辑的数据保存
:w!:强制保存文档
:q:退出vim
:q!:强制退出vim
:wq:保存并退出。:wq! 保存并强制退出
ZZ:文件没有改动,则不保存退出,若文件已改动过,则保存并退出
:w [filename]:将编辑的文件保存至新的文件
示例:将编辑中/tmp/log/a.t保存至f.t
:r [filename]:在编辑的行中,读入另一个文件的数据
:n1,n2 w [filename]:将 n1 到 n2 的内容保存成 filename 这个文件
:! command:暂时离开 vim到命令模式下执行 command 的显示结果,如:(:! ls /home)即可在 vim中查看 /home目录下文件信息
打开多个文件应用(vim file1 file2)
o:打开文件并横向显示
-O:打开文件并垂直显示
:vs 文件路径/文件名:多窗口打开并垂直分屏
:sv 文件路径/文件名:多窗口打开水平分屏
Ctrl+6:下一个文件(一个窗口,但是打开了多个文件)
:bn:下一个文件(一个窗口,但是打开了多个文件)
:bp:上一个文件(一个窗口,但是打开了多个文件)
Ctrl+w+方向键:切换到前/下/上/后(打开了多个窗口)
Ctrl+ww—:依次向后切换到下一个窗口(打开了多个窗口)
单个文件:q
关闭所有: qa
vim环境的设定
:set nobackup:从不备份
:set autoindent:自动缩进
:set hlsearch:搜索逐字符高亮,nohlsearch搜索逐字符不高亮
:set showmatch:高亮显示匹配的括号;noshowmatch不高亮显示匹配的括号
:set nu:显示行号:nonu:取消行号
:set syntax on :自动语法高亮
:set ignorecase smartcase :搜索时忽略大小写
以上都是临时设定,如需要永久设定生效,需要编辑配置文件:
全局配置文件:/etc/vimrc
示例:设置所有用户下vim编辑文件时,显示行号
用户个人的配置文件:~/.vimrc
更多简单了解vim编辑器,可查看vim内建教程输入命令:vimtutor
综合示例:
1、复制/etc/grub2.cfg配置文件至/tmp目录,用查找替换命令删除/tmp/grub2.cfg文件中的行首的空白字符;
注::%s/^\+s\//命令前面指明范围是 "%",所以这会作用于整个文件。"substitute" 命令的匹配模式是"^\+s\"。这表示行首(^)前的一个或者多个(\+)空格(\s)。替换命令的 "to" 部分是空的:"//"。这样就会删除那些匹配的空白字符。
2、复制/etc/rc.d/init.d/functions文件至/tmp目录,用查找替换命令为/tmp/functions的每行开头为空白字符的行的行首加一个#; 原有空白字符保留;
3、替换/tmp/functions文件中的/etc/sysconfig/init为/var/log;
4、删除/tmp/functions文件中所有以#开头,且#后面至少跟了一个空白字符的行的行首#;