vim编辑器
vi:Vistual Interface,是一种文本编辑器,所谓文本编辑器就是基于字符编码的文件,常见的编码有ASCLL编码,UNICODE编码。
vim:即vi IMproved:vi的增强版,可以使用颜色或者底线等方式来显示一些特殊信息,是模式化的编辑。
文本编辑器的种类
行编辑器:所谓行编辑器就是一行一行来编辑处理的工具,如sed
全屏编辑器:编辑空间占据整个屏幕,如nano,vi
vim工作的三种模式
编辑模式:也叫命令模式,键盘操作常被理解为编辑命令,如移动光标,剪切/粘贴文本。
输入模式:在文本文件中进行内容输入
末行模式:vim内置的命令行接口,执行vim的内置命令,如保存,退出等。
vim的使用
打开文件
#vim [OPTION]…FILE…
+#:打开文件后,直接让光标处于第#行的行首 +/PATTERN:打开文件后,直接让光标处于第一个被PATTERN匹配到的行的行首 vim + file:直接打开file,光标在最后一行 vim -b file:二进制方式打开文件 vim -d file1 file2...:比较多个文件 vim -m file 只读打开文件
如果该文件存在,文件被打开并显示内容
如果该文件不存在,当编辑后第一次存盘时创建它
模式转换
1、ESC键:可以从输入模式转到编辑模式
2、从输入模式转到编辑模式,可以使用下面的命令:
i:在光标所在的前方转换为输入模式 a:在光标所在的后方转换为输入模式 o:在光标所在行的下方新建一个空白行并转换为输入模式 I:在光标所在的行的行首输入 A:在光标所在的行的行尾输入 O:在光标所在行的上方新建一个空白行
3、编辑模式转到末行模式,直接输入冒号(:)即可在窗口的左下方显示冒号:
4、末行模式到编辑模式:敲击ESC键
5、输入到编辑到末行:输入模式不能直接转换到末行模式
退出文件
需要先切换至编辑模式之后才能退出,在切换至编辑模式之后键入一下命令即可进行相关操作
:q 退出 :q! 不保存退出 :wq 保存退出 :x 保存退出 :wq!强制保存退出 :ZZ 编辑模式保存退出的快捷键 :ZQ 编辑模式不保存退出的快捷键 :w /PATH/TO/SOMEWHERE 将当前文件内容写入另一个文件 :r /PATH/TO/SOMEWHER 读文件内容到当前文件中 r!command 把命令的标准输出读入文件
命令模式光标跳转
字符间跳转:
h: 左l: 右j: 下k: 上 #COMMAND:跳转由#指定的个数的字符;
单词间跳转:
w:下一个单词的词首 e:当前或下一单词的词尾 b:当前或前一个单词的词首 #COMMAND:由#指定一次跳转的单词数
当前页跳转:
H:页首M:页中间行L:页底
行首行尾跳转:
^: 跳转至行首的第一个非空白字符; 0: 跳转至行首 $: 跳转至行尾
行间移动:
#G、扩展模式:# :跳转至由#指定行 G:最后一行 1G, gg: 第一行
句间移动:
):下一句(:上一句
段落间移动:
}:下一段{:上一段
命令模式翻屏操作:
Ctrl+f: 向文件尾部翻一屏 Ctrl+b: 向文件首部翻一屏 Ctrl+d: 向文件尾部翻半屏 Ctrl+u:向文件首部翻半屏
命令模式操作
字符编辑:
x: 删除光标处的字符; #x: 删除光标处起始的#个字符 xp: 交换光标所在处的字符及其后面字符的位置 ~:转换大小写
替换命令(r, replace):
r: 替换光标所在处的字符 R:切换成REPLACE模式
删除命令:
d: 删除命令,可结合光标跳转字符,实现范围删除; d$: 删除到行尾 d^:删除到非空行首 d0:删除到行首 dw:删除下一个单词的词首 de:删除下一个单词的词尾 db:删除当前或前一个单词的词首 #COMMAND dd: 删除光标所在的行 #dd:多行删除 D:从当前光标位置一直删除到行尾,留空行,等同于d$
复制命令(y, yank):
y: 复制,行为相似于d命令 y$:复制从光标处到行尾 y0:复制从光标处到行首(绝对行首) y^:复制从光标处到行首 yy:复制行 #yy: 复制多行 Y: 复制整行 #COMMAND
粘贴命令(p, paste):
p:缓冲区存的如果为整行,则粘贴当前光标所在行的下方;否则,则粘贴至当前光标所在处的后面 P:缓冲区存的如果为整行,则粘贴当前光标所在行的上方;否则,则粘贴至当前光标所在处的前面
改变命令(c, change):
c: 修改,结合光标跳转字符使用,修改跳转范围内的字符
w,b,e,$,^,0
所为的修改就是先删除,再转换为输入模式
cc:删除当前行并输入新内容 #cc:删除指定行并输入新内容 C:删除当前光标到行尾,并切换成插入模式
地址定界:
:start_pos,end_pos #: 具体第#行,例如2表示第2行; #,#: 从左侧#表示行起始,到右侧#表示行结尾 #,+#: 从左侧#表示的行起始,加上右侧#表示的行数 :2,+3 表示2到5行 .: 当前行 $: 最后一行 .,$-1 当前行到倒数第二行 %:全文, 相当于1,$ /pat1/,/pat2/ 从第一次被pat1模式匹配到的行开始,一直到第一次被pat2匹配到的行结束 #,/pat/ 从指定行开始,到第一次被pat匹配到的行结束 pat/,$ 从第一次被pat模式匹配到的行开始,到最后一行结束 使用方式:后跟一个编辑命令 d:删除所匹配的内容 y:复制所匹配的内容 w file: 将范围内的行另存至指定文件中 r file:在指定位置插入指定文件中的所有内容
查找:
/PATTERN:从当前光标所在处向文件尾部查找 n:与命令同方向 N:与命令反方向 ?PATTERN:从当前光标所在处向文件首部查找 n:与命令反方向 N:与命令同方向
查找并替换
s: 在扩展模式下完成查找替换操作
格式:s/要查找的内容/替换为的内容/修饰符
要查找的内容:可使用模式
替换为的内容:不能使用模式,但可以使用\1, \2, …等后向引用符号;还可以使用“&”引用前面查找时查找到的整个内容
修饰符:
i: 忽略大小写 g: 全局替换;默认情况下,每一行只替换第一次出现 gc:全局替换,每次替换前询问
查找替换中的分隔符/可替换为其它字符,例如s@/etc@/var@g s#/boot#/#i
撤销更改
u:撤销最近的更改 #u:撤销之前多次更改 U:撤消光标落在这行后所有此行的更改 按Ctrl-r重做最后的“撤消”更改 .:重复前一个操作 n.:重复前一个操作n次
可视化模式
允许选择的文本块
v面向字符
V面向行
ctrl-v 面向块
可视化键可用于与移动键结合使用:
w,),},箭头等
突出显示的文字可以被删除,复制,变更,过滤,搜索/替换等
多文件模式
vim FILE1 FILE2 FILE3 …
:next 下一个 :prev前一个 :first 第一个 :last 最后一个 :wall 保存所有 :qall退出所有 :wqall
使用多个“窗口”
多文件分割
vim -o|-O FILE1 FILE2 ... -o: 水平分割 -O: 垂直分割 在窗口间切换:Ctrl+w, Arrow
单文件窗口分割:
Ctrl+w,s: split, 水平分割 Ctrl+w,v: vertical, 垂直分割 ctrl+w,q:取消相邻窗口 ctrl+w,o:取消全部窗口 :wqall退出
定制vim的工作特性
配置文件:永久有效
全局:/etc/vimrc
个人:~/.vimrc
扩展模式:当前vim进程有效
(1) 行号 显示:set number, 简写为set nu 取消显示:set nonumber, 简写为set nonu (2) 括号成对匹配 匹配:set showmatch, 简写为set sm 取消:set nosm (3) 自动缩进 启用:set ai 禁用:set noai (4) 高亮搜索 启用:set hlsearch 禁用:set nohlsearch (5) 语法高亮 启用:syntax on 禁用:syntax off (6) 忽略字符的大小写 启用:set ic 不忽略:set noic (7) 文件格式 启用:fileformat=unix 不忽略:fileformat=dos (8) 设置文本宽度 :set textwidth=65 (vimonly) :set wrapmargin=15 :help option-list :setor:set all
练习
1、复制/etc/profile至/tmp/目录,用查找替换命令删除/tmp/profile文件中的行首的空白字符
%s@^[[:space:]]\+@@g
2、复制/etc/rc.d/init.d/functions文件至/tmp目录,用查找替换命令为/tmp/functions的每行开头为空白字符的行的行首添加一个#号
%s@^[[:space:]]\+@#&@g
3、如何设置tab缩进为4个字符?
set ts=4
4、复制/etc/rc.d/init.d/functions文件至/tmp目录;替换/tmp/functions文件中的/etc/sysconfig/init为/var/log;
%s@/etc/sysconfig/init@/var/log@g
5、删除/tmp/functions文件中所有以#开头,且#后面至少有一个空白字符的行的行首的#号;
%s@^#[[:space:]]\{1,\}@@g
原创文章,作者:xiaoqing,如若转载,请注明出处:http://www.178linux.com/34723