概述
Vim是从vi发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用,和Emacs并列成为类Unix系统用户最喜欢的文本编辑器。Vim强大的编辑能力中很大部分是来自于其普通模式命令。vim的设计理念是命令的组合。例如普通模式命令"dd"删除当前行,"dj"代表删除到下一行,原理是第一个"d"含义是删除,"j"键代表移动到下一行,组合后"dj"删除当前行和下一行。用户学习了各种各样的文本间移动/跳转的命令和其他的普通模式的编辑命令,并且能够灵活组合使用的话,能够比那些没有模式的编辑器更加高效的进行文本编辑。
一.vim安装
在新版的linux中,大部分都内置了vim编辑器。而一些比较老的版本中依然是vi,亦或者是使用过程中,失手把vim卸载了。遇到这些情况,如果想要使用功能强大的vim,就需要我们重新对其进行安装。 如果你的系统已经连接外网,且yum源没做修改,只需要执行一下命令进行安装
yum install -y vim
如果没有网络的情况下,就需要到用rpm包的方式自行安装。如下面是我在CentOS7上把vim卸载后,手动安装的过程
~]# yum remove -y vim #卸载vim tmp]# which vim #在另一台vim正常的CentOS7上查看vim命令位置 /usr/bin/vim tmp]# rpm -qf /usr/bin/vim #查看vim是由哪个安装包安装而来 vim-enhanced-7.4.160-1.el7.x86_64 Packages]# rpm -ivh vim-enhanced-7.4.160-1.el7.x86_64.rpmwarning: vim-enhanced-7.4.160-1.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY Preparing... ################################# [100%] package vim-enhanced-2:7.4.160-1.el7.x86_64 is already installed [root@centos7 Packages]##以上是我由本地rpm包中安装,实际中可能需要从其它相同版本中拷贝,然后安装。由于其没有依赖包,rpm包的方式还是蛮方便的哈。。
二.vim的简单使用
1.打开文件
vim [OPTION]... FILE... +#:打开文件后直接将光标处于第#行 +/PATTERN:打开文件后,直接让光标处于第一个被PATTERN匹配到的行的行首 vim + file 直接打开file,光标在最后一行 vim -b file 二进制方式打开文件 vim -d file1 file2... 比较多个文件 示例:~]# vim -d headscp.txt second.sh third.sh #此时会垂直分三屏分别显示三个文件并高亮显示差异
vim -m file 只读打开文件ex file 或 vim -e 直接进入ex模式vim 后面跟文件名,如果该文件存在,文件被打开并显示内容 如果该文件不存在,当编辑后第一次存盘时创建它
2.vim的模式
在vim编辑文本时,击键行为是依赖于vim的“模式”vim有三种主要模式: 命令模式(默认):移动光标,剪切/粘贴文本 插入(编辑)模式:修改文本 扩展命令模式:保存,退出等 对于上面的三种模式中的操作,稍后会进行详细说明 ESC键 退出当前模式 ESC键 ESC键 总是返回到命令模式
3.模式间的转换:
命令模式-->插入模式 i:insert,在光标所在处输入 I:在当前光标所在行的行首输入 a:append,在光标所在处后面输入 A:在光标所在行的行尾输入 o:在当前光标所在行的下方打开一个新行 O:在当前光标所在行的上方打开一个新行 插入模式-->命令模式 ESC键 命令模式-->扩展模式 : 扩展模式-->命令模式 ESC 锁定和解锁: CTRL+s 锁定 Ctrl+q 解锁
4.关闭文件
扩展模式: :q 退出 :q! 强制退出,丢弃做出的修改 :wq 保存退出 :x 保存退出 命令模式: ZZ:保存退出 ZQ:不保存直接退出
三. vim进阶
1.扩展模式
按“:”进入Ex模式 创建一个命令提示符:处于底部的屏幕左侧 命令: w写(存)磁盘文件 wq写入并退出 x写入并退出 q退出 q!不存盘退出,即使更改都将丢失 r filename 读文件内容到当前文件中 w filename 将当前文件内容写入另一个文件 !command 暂停对文本的操作,进行命令的操作,此过程不会改变文件内容,是一种不必中断编辑直接进行命令操作的好方式 r!command 把一个命令的执行结果读入到当前处理的文件中
2. 命令模式
光标跳转
字符间跳转: 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向前删除单词d ( 删一句;d {删一段d G删到行尾;d gg 删到行首 #COMMAND:上面一些也可以结合数字实现多行多个单词的删除 dd:删除光标所在的行 #dd:多行删除D:从当前光标位置一直删除到行尾,留空格,等同于d$
复制命令
y:复制,行为相似于d命令y$:复制至行尾 y0:复制至行首y^:复制至第一个非空字符 ye:复制至当前词尾或下个词尾 yw:复制一个单词 yb:向前复制一个单词#COMMANDyy:复制行 #yy:复制多行y:复制整行
粘贴命令
P:缓冲区存的如果是整行,则粘贴当前光标所在行的下方;否则,则粘贴至当前光标所在处的后面P:缓冲区存在的如果是整行,则粘贴当前光标所在的行的上方;否则,则粘贴至当前光标所在处的前面
改变命令
c:修改后切换成插入模式 命令模式-->插入模式 c$:删除至行尾 c^:删除至行首第一个非空字符 c0:删除至行首 cb:向前删除一个单词 ce:向后删除至单词尾部或下一个单词尾部 cw:删除至下一单词行首 #COMMAND:同时删除多个 cc:删除当前行并输入新内容 #cc:删除多行 C:删除当前光标到行尾,并切换成插入模式
四. vim提高
1.命令模式:
100iwang [ESC] 粘贴“wang” 100次
<start position> <command><end position>
COMMAND: y 复制、d 删除、gU 变大写、gu变小写 例如 0y$ 命令意味着: 0--> 先到行头 y--> 从这里开始拷贝 $-->拷贝到本行最后一个字符 ye:从当前位置拷贝到本单词的最后一个字符
2.扩展模式
地址定界
:start_pos,end_pos#:具体第#行,例如2表示第二行#,#:从左侧#表示行起始,到右侧#表示行结尾#,+#:从左侧#表示的行起始,加上右侧#表示的行数:2,+3 表示2到5行.:当前行 $:最后一行 .,$-1:当前行到倒数第二行 %:全文,相当于1,$ /pat1/,/pat2/ 从第一次被pat1模式匹配到的行开始,一直到第一次被pat2匹配到的行结束 #,/pat/:从#行开始到匹配的行结束 /pat/,$:从匹配到的行到文件结尾 使用方式:后面跟一个编辑命令 d:删除 y:复制 w file:将范围内的行另存至指定文件中 r file :在指定位置插入指定文件中的所有内容
查找
/PATTERN:从当前光标所在处向文件尾部查找 ?/PATTERN:从当前光标所在处向文件尾部查找n:与命令同方向N:与命令反方向
查找并替换
s:在扩展模式下完成查找替换操作 格式:s/要查找的内容/替换为的内容/修饰符 要查找的内容:可以使用模式 替换为的内容:不能使用模式,但可以使用\1,\2,...等后向引用符号;还可以使用“&”引用前面查找时查找到的整个内容 修饰符: i:忽略大小写 g:全局替换;默认情况下,每一行只替换第一次出现 gc:全局替换,每次替换前询问 查找替换中的分隔符/可替换为其它字符,例如 s@/etc@/var@g s#/boot#/#i
撤销更改
u撤销最近的更改 #u撤销之前的多次更改U撤销光标落在这行后所有此行的更改 按Ctrl - r重做最后的“撤销”更改 .重复前一个操作n.重复前一个操作n次
vim寄存器
vim中有26个命名寄存器和1个无命名寄存器,长存放不同的剪切板内容,可以不同会话间共享。 用a,b,...,z表示,放在数字和命令之间: 如:3"tyy表示复制2行到t寄存器中 "tp表示将t寄存器内容粘贴未指定,将使用无命名寄存器 有10个数字寄存器0,1,2...,9表示,0存放最近复制内容,1存放最近删除内容。当新的文本变更和删除时,1转存到2,2转存到3,依此类推。数字寄存器不能在不同会话间共享。
编辑二进制文件:
以二进制方式打开文件 vim -b binaryfile扩展命令模式下,利用xxd命令转换为可读的十六进制 :%!xxd 编辑二进制文件 扩展命令模式下,利用xxd命令转换回二进制 :%!xxd -r 保存退出
可视化模式
允许选择文本块 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)设置tab默认缩进为4个字符 set smartindent set tabstop=4 set shiftwidth=4 set expandtab set softtabstop=4(4)自动缩进 启用:set ai 禁用:set noai (5)高亮搜索 启用:set hlsearch 禁用:set nohlsearch (6)语法高亮 启用:syntax on 禁用:syntax off(7)忽略字符的大小写 启用:set ic 禁用:set noic (8)文件格式 启用:fileformat=unix 不忽略:fileformat=dos (9)设置文本宽度: :set textwidth=65(vim only) :set wrapmargin=15获取set相关帮助 :help option-list:set or :set all
vi/vim内置帮助及自定补全
vi/vim内置帮助 :help :help topic Use:q to exit helpvimtutor是vim自带的帮助及练习手册,可以经常使用提高编辑速度 补全:vim使用过程中,已知补全方式为前面已经有过该单词出现,下次使用输入前面单词,然后按Ctrl+p可以列出可选项供我们选择,偶尔使用可以提高文本编辑速度。
总结
上文中仅仅对vim的部分功能做了总结,作为一款强大的编辑器,当然还有诸多功能来提高我们的文本编辑速度。为了尽快熟悉vim的使用,要善用vimtutor,多练习多使用。
原创文章,作者:提着酱油瓶打醋,如若转载,请注明出处:http://www.178linux.com/33608