VI: Visual Interface,文本编辑器
文本: ASCII, Unicode vi是一个功能强大的全屏幕文本编辑工具,一直以来都作为类UNIX操作系统的默认文本编辑器,vim(ViImproved)是vi编辑器的增强版本。在vi的基础上扩展了很多实用的功能,但是习惯上也将vim称作vi。
文本编辑种类 行编辑器: sed 全屏编辑器:nano, vi
其他编辑器 gedit 一个简单的图形编辑器 gvim 一个vim编辑器的图形版本
vi相关工具 vipw vipr
一、vim编辑器的工作模式
1、模式介绍 命令模式(Command Mode):启动vi编辑器后默认进入命令模式。该模式中主要完成如光标移动、字符串查找、以及删除、复制、粘贴文件内容等相关操作。 插入模式(Insert Mode):该模式中主要的操作就是录入文件内容,可以对文本文件正文进行修改或者添加新的内容。处于输入模式时,vi编辑器的最后一行会出现“——INSERT——“的状态提示信息。 末行模式(Last Line Mode):该模式中可以设置vi编辑环境、保存文件、退出编辑器,以及对文件内容进行查找、替换等操作。处于末行模式时,vi编辑器的最后一行会出现冒号”:“提示符。 2、模式切换 命令模式 → a、i、o 、A、I、O → 插入模式 插入模式 → Esc → 命令模式 命令模式 → : → 末行模式 末行模式 → Esc → 命令模式 按两次Esc可快速返回到命令模式
二、vim打开保存文件
1、打开单个文件 vim [选项] 文件名 直接使用vim会打开一个有提示信息的空文档,保存退出时需要在末行模式下使用w选项先保存,再退出文件。 使用vim可以使用如下选项打开文件: +# : 打开文件后,直接让光标处于第#行的行首 +/PATTERN :打开文件后,直接让光标处于第一个被PATTERN匹配到的行的行首 vim + file :直接打开file,光标在最后一行 vim –b file :二进制方式打开文件 vim –d file1 file2… :比较多个文件,多窗口打开 vim -m file :只读方式打开文件
单文件窗口分割: Ctrl+w,s: split, 水平分割 Ctrl+w,v: vertical, 垂直分割 ctrl+w,q:取消相邻窗口 ctrl+w,o:取消全部窗口 : wqall 退出
2、打开多个文件 vim 选项file1 file2 ... 用vim同时打开多个文件 -o:横向打开多个文件 -O:纵向打开多个文件 ctrl+w+方向箭头 多个文件之间切换 :next 下一个 :prev 前一个 :first 第一个 :last 最后一个 :wall 保存所有 :qall 退出所有 :wqall
3、编辑二进制文件 以二进制方式打开文件 vim –b binaryfile 扩展命令模式下,利用xxd命令转换为可读的十六进制 :%!xxd :%!xxd –r 转换回二进制 编辑二进制文件 ~]# xxd /tmp/profile
4、保存文件 当编辑一个文件时,如果该文件存在,文件被打开并显示文件内容;如果该文件不存在,当编辑后第一次存盘时创建它。 退出编辑器。需要退出vi编辑器时,可以执行“:q”命令。若文件内容已经修改保存,仅使用“:q”命令将无法成功退出,这时需要使用“:q!”命令强行退出(不保存即退出)。 末行模式:(输入”:”进入末行模式) :w 保存文件,当文件已经存在时,使用此命令 :w new_filename 将文件另存为 :! 强行操作 :w! 强行保存文件 :q 退出 :q! 强行退出 :wq 或 :x 保存退出 :x! 命令行模式:(Esc) ZZ 保存退出 ZQ:不保存退出
三、命令模式中的操作命令
1、输入模式切换 在命令模式中,使用a、i、o等按键可以快速切换至输入模式,同时确定插入点的方式和位置,以便录入文件内容。需要返回命令模式时,按Esc键即可。 常见的几个模式切换键及其作用如下: a:append,在当前光标位置之后插入文内容 A:在光标所在行的末尾(行尾)插入内容 i: insert,在当前光标位置之前插入内容 I: 在光标所在行的开头(行首)插入内容 o:在光标所在行的后面插入一个新行(小写字母o) O:在光标所在行的前面插入一个新行(大写字母O)
2.、移动光标 字符间跳转 直接使用键盘的四个方向键完成相应的光标移动。 h: 将光标向左移动一格 l: 将光标向右移动一格 j: 将光标向下移动一格 k: 将光标向上移动一格 #COMMAND:跳转由#指定的个数的字符
单词间跳转 w:下一个单词的词首 e:当前或下一单词的词尾 b:当前或前一个单词的词首 #COMMAND:由#指定一次跳转的单词数 Ctrl+COMMAND:以连续字符算一个单词
当前页跳转 H:将光标移动到该屏幕的页首 M:将光标移动到该屏幕的中间行首 L: 将光标移动到该屏幕的最后一行行首
行首行尾跳转 ^: 跳转至行首的第一个非空白字符(相对行首) 0或 home键: 数字0,将光标移动到该行的行首(绝对行首) $ 或 end键: 将光标移动到该行的行末(绝对行尾) 其中home和end键同样适用于vi的输入模式
行间移动 #G:#为数值,跳转至由#指定行的行首 G:将光标移动到文章的最后一行 1G 或 gg: 将光标移动到文章的第一行 Enter:移至下行行首
句间移动,以“.”为分隔符 ):下一句 (:上一句
段落间移动 }:下一段 {:上一段
翻页操作 Ctrl+F 或 page down: 向文件尾部翻一屏 Ctrl+B 或 page up: 向文件首部翻一屏 Ctrl+D: 向文件尾部翻半屏 Ctrl+U:向文件首部翻半屏 其中PageDown和PageUp键同样适用于vi的输入模式
删除操作 x 或 del键:删除光标处的单个字符 #x: #为数值,删除光标处后面的#个字符(包含光标处字符) X: 删除当前光标前的单个字符 dd:删除当前光标所在行 #dd:#为数值,删除从光标处开始后面#行内容 d^:删除当前光标之前到行首的所有字符 d$:删除当前光标处到行尾的所有字符 dCOMMAND:命令可为h,l,j,k,分别表示删除光标前后单个字符、上下一行内容 d后面结合方向键可以删除当前光标处前一字符、后一字符、上两行、下两行 d0:删除到行首 dw:删除整个单词,如光标不在词首,则删除从当前到词尾 de:光标后面的单词,如光标不在词首,则删除从当前到词尾 db:删除光标前面的单词,如光标不在词尾,则删除从当前到词首 D:从当前光标位置一直删除到行尾 2d6 从第二行开始删除,一共删除6行
替换命令(r, replace) r: 替换光标所在处的单个字符 R:切换成REPLACE模式,连续替换后面字符,按Esc结束 xp: 交换光标所在处的字符及其后面字符的位置(x删除,p粘贴) ~:转换大小写 gU 变大写 gu 变小写
复制、剪切、粘贴 Y: 复制光标所在行整行内容 yy:复制光标所在行整行的内容 #yy:复制从光标处开始的#行内容 #yw 例如:2yw就是复制两个单词 y$ 复制光标所在处到行尾的内容 y0 复制光标前一个字符到行首的内容(绝对,包括制表符) y^ 复制光标前一个字符到行首的内容(相对) ye 从当前位置拷贝到本单词的最后一个字符 yw 复制当前光标所在位置到单词尾字符的内容,相当于复制一个单词 100ic [ESC] 在当前位置向后粘贴“ c” 100次 p:粘贴到光标位置处之后 P:粘贴到光标位置处之前 :3,5y复制第三行到第五行内容
撤销操作 u: 用于取消最近一次的操作,多次重复按u键恢复已进行的多步操作 #u:撤销之前多次更改 U:取消对当前行所做的所有编辑 Ctrl+R可以恢复对使用u命令的操作 . 重复前一个操作 n. 重复前一个操作n次
其他命令 CTRL+s,锁定 Ctrl+q,解锁
四、命末行模式中的操作命令
:r filename 读文件内容到当前文件中(当前行的下面) :r!command 将执行命令的结果写入到文件中 :!command 不退出vim执行命令 :set nu number,显示行号 :set nonu nonumber,取消显示行号 :set autoindent 缩进每一行,使之与前一行相同。常用于程序的编写。 :set noautoindent 取消缩进 :set number 在编辑文件时显示行号 :set nonumber 取消行号显示 :set ruler 在屏幕底部显示光标所在的行、列位置 :set noruler 不显示光标所在的行、列位置 :n1,n2 co n3 将从n1开始到n2为止的所有内容复制到n3后面 :n1,n2 m n3 将从n1开始到n2为止的所有内容移动到n3后面 :n1,n2 d 删除从n1开始到n2为止的所有内容 :n 直接输入要移动到的行号即可实现跳行 :/str/ 从当前光标开始往后移动到有 str 的地方 :?str? 从当前光标开始往前移动到有 str 的地方 :setsm showmatch,成对匹配 :setnosm 取消成对匹配 :setai 启用自动缩进 :setnoai 禁用自动缩进 :set hlsearch 启用高亮搜索 :set nohlsearch 取消高亮搜索 :syntax on 启用语法高亮
:syntax off 禁用语法高亮 :set ic 启用忽略字符的大小写 :set noic 不忽略字符的大小写
五、可视化模式
允许选择的文本块 v 面向字符 V 面向行 ctrl-v 面向块 可视化键可用于与移动键结合使用: w, ) , },箭头等 突出显示的文字可以被删除,复制,变更,过滤,搜索/替换等
六、扩展模式:地址定界
地址定界 :start_pos,end_pos #: 具体第#行,例如2表示第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
示例: :s/old/new 用new替换行中首次出现的old : s/old/new/g 用new替换行中所有出现的old :3,9 s/old/new/g用new替换从第3行到第9行中出现的old :% s/old/new/g 用new替换整篇中出现的old :s/old/new/gc 替换关键词之前替换
八、vim的寄存器
有26个命名寄存器和1个无命名寄存器,常存放不同的剪贴版内容,可以不同会话间共享。 用a, b,…,z表示,用“寄存器表示,放在数字和命令之间 如: 3"tyy 表示复制3行到t寄存器中;"tp 表示将t寄存器内容粘贴 未指定,将使用无命名寄存器 有10个数字寄存器,用0, 1, …, 9表示, 0存放最近复制内容, 1存放最近删除内容。当新的文本变更和删除时, 1转存到2, 2转存到3,以此类推。数字寄存器不能在不同会话间共享。
九、定制vim的工作特性当使用vim打开文件时可以输入set COMMAND设置vim的工作特性,这些都是临时生效的,关闭文件后设置的特性都失效了,要想永久生效可以把命令写入到文件中。
配置文件:永久有效 全局: /etc/vimrc 个人: ~/.vimrc 同时存在,个人配置生效
十、了解更多vi/vim内置帮助 :help set :help :help topic ~]$vimtutor
|