在使用linux的过程中,无论是运维管理还是普通用户都难免对操作文件,拥有一款得心应手的编辑器是必不可少的。可以说绝大部分使用者都是使用的vi/vim编辑器,不仅仅是因为它是linux系统默认安装了的软件,还因为它体积很小,功能强大。
vim(VI iMproved)编辑器可以说是vi(visual interface)的扩展版,vim支持语法高亮等特性,以及各种高效率的操作。使得编辑文件的效率得到提高,当然这需要使用者对其相对较熟悉。
(二).vim的常见模式:
(1).vim的模式非常多,这里只介绍一部分模式,包括编辑模式,插入模式,末行模式,本文也包含替换模式和可视化模式的内容。
a.编辑模式:就是使用vim打开文件或者直接输入vim之后的模式,左下角没什么特殊的提示,如下两图:
b.插入模式:一般按i,a,s,o或其大写等能进入插入模式,在这个模式下输入的内容会写到文件。如下图,在左下角会提示编辑器此时正处于该状态:
c.末行模式:此模式是在编辑模式下输入':'后进入的模式,该模式下的功能很多包括执行一些其他shell命令等,如下图所示:
d.替换模式:该模式是在编辑模式下按R键进入,在该模式下对文本的操作是替换操作,和覆盖差不多,如下图:
e.可视化模式:这种模式和windows里面的多选差不多,在编辑模式下按v或者V键能进入该模式,可以对选中的内容进行操作,如下图:
(2).这些模式之间是可以相互转换的,下图描述了上面几种模式的相互转换:
(三).vim的常用技巧:
(1).打开文件:
vim filename: 打开名为filename的文件,光标处于文件的开始位置。
vim +n filename: 打开文件后,直接让光标处于第n行的行首。
vim + filename: 打开文件后直接处于最后一行行首(注意加号两边是空格)。
vim /pattern filename: 打开文件后使光标定位到第一次被pattern匹配到的模式位置(pattern是匹配模式,之后要确定一下,如下图:)
(2).关闭文件:一般在末行模式或者编辑模式下关闭文件
末行模式下:
q: 退出(不会保存内容,若此时编辑了内容,是不能退的,会让你确认是否保存)
wq: 保存并退出
q!: 不保存并退出
w: 保存
w!: 强制保存(需要特定权限)
x: 与wq一样
编辑模式下:
zz: 保存退出
(3).编辑器的一些常见设置:可以更改/etc/vimrc文件或者~/.vimrc,在末行模式下添加如下内容,也可以在末行模式下执行如下内容:
:set nu 让编辑器行号(nu为number)
:syntax on 开启语法高亮
:set ts=4 设置tab长度为4
:set autoindent 设置自动对齐
:set cindent C语言编码时,内嵌代码自动缩进
这个设置完全可以按自己的喜好设置,网上很多,这里就不一一例举了。
(4).光标移动:
a.逐个字符移动
h: 左移光标
l: 上移光标
j: 下移光标
k: 右移光标
数字n与以上几个键组合: 可一次移动n个字符(例如3j: 光标从当前位置开始下移三个位置)
b.逐个单词移动
w: 移到下个单词词首
e: 移到当前或下一个单词的词尾
b: 跳到当前或上一个单词的词首
数字键n与上面的键组合: 可一次移动n个单词位置(例如5w: 向后移动五个单词的位置,且到单词首字母位置)
(5).行内跳转:
0: 跳到行首(绝对行首)
^: 跳到行首(相对行首)
$: 跳到行尾
(6).行间跳转:
G: 跳到最后行
gg: 跳到第一行
n + G: 跳转到第n行
在末行模式下跳转只需输入行号即可跳转,如下图:
(7).翻屏操作:
Ctrl + f: 向下翻一屏
Ctrl + b: 向上翻一屏
Ctrl + d: 向下翻半屏
Ctrl + u: 向上翻半屏
(8).删除单个字符:
x: 删除光标所在处的单个字符
nx: 删除光标所在处及向后的共n个字符
(9).删除命令d:
a.编辑模式下,与跳转命令组合使用可以删除多少内容:
dw: 删除一个单词
dd: 删除当前光标所在行
ndd: 删除包括当前光标所在行内的n行
b.末行模式下
m, nd:删除m到n行
., +5d:删除当前行到当前行之后的5行(共5行)
., 100d:删除当前航到100行
., $-9d:删除当前行到倒数第10行
c.说明: 删除的内容并没有被立即清空,而是在内存中,最后一次删除的内容可用于粘贴
(10).粘贴命令:
p: 如果删除或复制为整行内容,则粘贴到光标所在行的下方,如果复制或者删除的内容不是整行,则粘贴到光标所在字符的后面
P: 如果删除或复制为整行内容,则粘贴到光标所在行的上方,如果复制或者删除的内容不是整行,则粘贴到光标所在字符的前面
(11).复制命令y:
用法与d命令一样,将d换成y即可,也可在变模式和末行模式下进行,使用方法完全一样。
(12).修改命令c: 先删除内容,再转换为插入模式。
用法与d命令一样,将d换成c即可,也可在变换,如: c$: 先删除当前光标所在位置到末行的内容,然后进入插入模式。
(13).替换命令r:
按了r之后,输入要替换成的字符
也可与n组合,达到同时替换多个字符(一般不会那么干,很少有意义)
R:直接进入替换模式,输入的内容将覆盖原有的内容
(14).撤销编辑:
u: 撤销前一次编辑操做
nu:撤销前n次操作(一般只保留50次修改操作)
撤销刚刚撤销的操作:Ctrl + r
(15).重复前一次编辑操作
.: 按'.'即可重复上一次操作,例如:dd会后,再按'.',则会继续执行dd命令
(16).可视化模式(如下图):
v: 按字符选取
V: 按矩形选取
(17).查找替换:
/pattern:从文件首向尾部查找
?pattern:从当前光标位置向文件首部查找
n:跳到下一个匹配到的对象
N:跳到上一个匹配到的对象
(18).查找并替换(在末行模式下):
m, ns/pattern/string/g(全局替换)i(忽略大小写)
m, ns@pattern@string@gi(与上面效果完全一样)
在第m行到n行搜索partern(可以正则),替换成string,即使一行有多个全部替换,忽略大小写
例如:
s/pattern/string/: 替换当前行匹配到的pattern的第一个对象为string
s/pattern/string/g: 替换当前行匹配到的pattern的所有对象为string
m, $s/pattern/string/: 替换从m行到最后一行匹配到的pattern的第一个对象为string
m, $s/pattern/string/g: 替换从m行到最后一行匹配到的pattern的所有对象为string
., $s/pattern/string/g: 替换从当前行到最后一行匹配到的pattern的所有对象为string
1, $s/pattern/string/g: 替换文本中所有的匹配到的pattern为string
%s/pattern/string/: 替换每一行匹配到的pattern的第一个对象为string
%s/pattern/string/g: 替换每一行匹配到的pattern的所有对象为string
说明: '/'与'@'效果在这里是一样的。
(四).如有不足之处,还请斧正:
这里只是写了vim的一少部分常用的功能,若你所找的答案不在其中,还请使用man帮助或者其他相关资料进行查阅。
原文:http://blog.51cto.com/daye8ku/2058816