设为首页 收藏本站
查看: 444|回复: 0

[经验分享] VIM(VI)编辑器使用整理

[复制链接]
累计签到:2 天
连续签到:1 天
发表于 2016-8-10 09:10:50 | 显示全部楼层 |阅读模式
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编辑器的最后一行会出现冒号”:“提示符。
QQ截图20160810091036.png
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


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-255765-1-1.html 上篇帖子: cobbler问题求助 下篇帖子: Raid卡及存储阵列
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表