Linux文本编辑器之 vi vim 详谈

Linux文本编辑器之 vi vim

        vi :Visual Interface,它与sed不同,sed是功能比较简单的行编辑器,而vi是一个功能强大的全屏文本编辑器,它还有一个增强版vim (Vi IMproved).在vim里,有很多功能强大的文本编辑快捷键,以便你在编辑文本是能够迅速的实现文本的查找,修改,替换,引用等操作.

vim功能,操作详解:

打开文件:

QQ截图20160810095415.png

    # vim [OPTION]… FILE…

    +#: 打开文件后,直接让光标处于第#行的行首

    +/PATTERN:打开文件后,直接让光标处于第一个被

    PATTERN匹配到的行的行首

    vim + file 直接打开file,光标在最后一行

    vim -b file 二进制方式打开文件

    vim -d file1 file2… 比较多个文件

    vim -m file 只读打开文件

     ex file 或 vim –e 直接进入ex模式

     如果该文件存在,文件被打开并显示内容

    如果该文件不存在,当编辑后第一次存盘时创建它

vim:是一个模式编辑器

QQ截图20160810095900.png

 三种主要模式:(模式的名称在每个地方叫法不同,如,有人喜欢叫扩展命令模式叫末行命令模式等)

    1: 命令模式(默认):移动光标,剪切/粘贴文本

    2: 插入(编辑)模式:修改文本

    3: 扩展命令模式:保存,退出等

  Esc键 :退出当前模式

  Esc键 Esc键 : (两下Esc键)返回到命令模式

    

    模式转换

         插入模式 —-> 命令模式

        ESC

         命令模式 —-> 扩展模式

        :

         扩展模式 —-> 命令模式

        ESC

         锁定和解锁:CTRL+s,Ctrl+q       

    1 : 运行命令 vim /etc/inittab 默认以命令模式打开文本

blob.png

    2: 在命令模式下按快捷键 i 等,进入编辑模式

blob.png

    3: 在命令模式下,输入 : 可以进入 扩展命令模式

blob.png

    关闭文件

        扩展模式:

            :q 退出

            :q! 强制退出,丢弃做出的修改

            :wq 保存退出

            :x 保存退出

        命令模式

            ZZ: 保存退出

            ZQ:不保存退出

    命令模式 –> 插入模式

            i: insert, 在光标所在处输入

            I:在当前光标所在行的行首输入

            a: append, 在光标所在处后面输入

            A:在当前光标所在行的行尾输入

            o: 在当前光标所在行的下方打开一个新行

            O:在当前光标所在行的上方打开一个新行

     扩展模式 : 按“ :”进入Ex模式, 创建一个命令提示符:,处于底部的屏幕左侧        

            命令:

            w 写(存)磁盘文件

            wq 写入并退出

            x 写入并退出

            q 退出

            q! 不存盘退出,即使更改都将丢失

            r filename 读文件内容到当前文件中

            w filename 将当前文件内容写入另一个文件

            !command     //运行命令command,命令运行完之后按Enter继续编辑文本

            r!command     //将命令command运行的结果输入之当前光标的下方

   命令模式

      光标跳转           

            h: 左 l: 右 j: 下 k: 上       // 字符间跳转:在按键前先输入数字,按数字移动,如 10h 向左移动10个字符

            #COMMAND:跳转由#指定的个数的字符;

         单词间跳转

            w:下一个单词的词首

            e:当前或下一单词的词尾

            b:当前或前一个单词的词首

            #COMMAND:由#指定一次跳转的单词数

         当前页跳转

            H:页首 M:页中间行 L:页底

      翻屏操作:

 Ctrl+f: 向文件尾部翻一屏

 Ctrl+b: 向文件首部翻一屏

 Ctrl+d: 向文件尾部翻半屏

 Ctrl+u:向文件首部翻半屏

      字符编辑:

x: 删除光标处的字符;

#x: 删除光标处起始的#个字符

xp: 交换光标所在处的字符及其后面字符的位置

~:转换大小写

 替换命令(r, replace)

r: 替换光标所在处的字符

R:切换成REPLACE模式

    删除命令:

d: 删除命令,可结合光标跳转字符,实现范围删除;

d$: 删除到行尾

d^:删除到非空行首

d0:删除到绝对行首

dw:向后删除一个单词

de:向后删除一个单词

db:向前删除一个单词

#command: #为数字,command为以上的命令符

dd: 删除光标所在的行

#dd:多行删除

D: 从当前光标位置一直删除到行尾,留空行,等同于d$

     复制命令(y, yank):

y: 复制,行为相似于d命令

y$ :复制到行尾

y0 :复制到绝对行首

y^ :复制到非空行首

ye :向后复制一个单词

yw :向后复制一个单词

yb :向前复制一个单词

#COMMAND:#为数字,command为以上的命令符

 yy:复制行

#yy: 复制多行

 Y: 复制整行

     粘贴命令(p, paste):

p:缓冲区存的如果为整行,则粘贴当前光标所在行的下方;否则,则粘贴至当前光标所在处的后面

P:缓冲区存的如果为整行,则粘贴当前光标所在行的上方;否则,则粘贴至当前光标所在处的前面

     改变命令(c, change)

c: 修改后切换成插入模式

 命令模式 –> 插入模式

c$:替换到行尾

c^:替换到非空行首

c0:替换到绝对行首

cb:替换前一个单词

ce:替换后一个单词

cw:替换后一个单词

#COMMAND :#为数字,command为以上的命令符

        cc:删除当前行并输入新内容

#cc:替换多行

        C:删除当前光标到行尾,并切换成插入模式

      粘贴

 100iwang [ESC] 粘贴“ wang” 100次

    <start position><command><end position>

 Command:

y 复制、 d 删除、 gU 变大写、 gu 变小写

例如 0y$ 命令意味着:

0 → 先到行头

y → 从这里开始拷贝

$ → 拷贝到本行最后一个字符

ye 从当前位置拷贝到本单词的最后一个字符

撤销更改:

 u撤销最近的更改

 #u撤销之前多次更改

 U 撤消光标落在这行后所有此行的更改

 按Ctrl – r重做最后的“撤消”更改

 . 重复前一个操作

 n.重复前一个操作n次

扩展模式:地址定界

地址定界:

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

vim的寄存器

有26个命名寄存器和1个无命名寄存器,常存放不同的剪贴版内容,可以不同会话间共享。未指定,将使用无命名寄存器.

用a, b,…,z表示,用“寄存器表示,放在数字和命令之间

如: 3"tyy :表示复制3行到t寄存器中

"tp   :表示将t寄存器内容粘贴

有10个数字寄存器,用0, 1, …, 9表示, 0存放最近复制内容, 1存放最近删除内容。当新的文本变更和删除时, 1转存到2, 2转存到3,以此类推。数字寄存器不能在不同会话间共享。

vim可以编辑二进制文件

    编辑二进制文件

     以二进制方式打开文件

    vim –b binaryfile

     扩展命令模式下,利用xxd命令转换为可读的十六进制

    :%!xxd

     扩展命令模式下,利用xxd命令转换回二进制

    :%!xxd –r

vim的可视化模式

     允许选择的文本块

        v 面向字符

blob.png

        V 面向行

blob.png

        ctrl-v 面向块

blob.png

     可视化键可用于与移动键结合使用:

        w, ) , } ,箭头等

     突出显示的文字可以被删除,复制,变更,过滤,搜索/替换等

多文件模式

 vim FILE1 FILE2 FILE3 …

:next 下一个

:prev 前一个

:first 第一个

:last 最后一个

:wall 保存所有

:qall 退出所有

:wqall

blob.png

使用多个窗口:

多文件分割

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 (vim only)

:set wrapmargin=15

:help option-list

:set or :set all

原创文章,作者:hunter,如若转载,请注明出处:http://www.178linux.com/32474

(0)
hunterhunter
上一篇 2016-08-15
下一篇 2016-08-15

相关推荐

  • Puppet 的使用与进阶

    Puppet 基于puppet 可实现自动化重复任务, 快速部署关键性应用以及在本地或云端完成主动管理变更和快速扩展架构规模.基于master/agent 模型. 基于RPC 的通信, 基于xml 进行数据交换 define : 使用puppet 语言来定义资源的状态模拟 : 根据资源关系图, puppet 可以模拟部署无损运行测试代码强制 : 对比客户端主…

    2016-12-04
  • Linux 第九天: 练习和作业

    Linux 第九天: 练习和作业       编写脚本/root/bin/systeminfo.sh 显示当前主机系统信息 包括主机名 ipv4地址 操作系统版本 内核版本 CPU信号 内存大小 硬盘大小 server_ip=`ifconfig|grep'inet\b'|grep -v '…

    Linux干货 2016-08-15
  • 上下文管理练习(为加法函数计时)

    上下文管理(为加法函数计时) 为加法函数计时 使用装饰器显示该函数的执行时长 使用上下文管理显示该函数的执行时长 装饰器实现 import time import datetime from functools import wraps def logger(fn): @wraps(fn) # wraps(fn)(wrapper) def wrapper(*…

    2017-11-18
  • DNS 笔记

    Ø DNS查询。工作流程如下图         n  客户端的DNS:8.8.8.8 /etc/hosts  14.215.177.38 www.baidu.com n  客户端访问www.baidu.com 不用向DSN服务器发生查询,只需要查询本地的 /e…

    Linux干货 2016-08-15
  • Linux程序包管理

    Linux程序包管理 RPM包基础 RPM YUM 编译安装 概述 Linux上的程序包管理,是我们的必备技能,本文将从三个视角:rpm、yum、源码编译来浅析Linux的程序包管理。首先,我们来看下本文的主要内容: – 程序包的命名- RPM: 程序包管理器    安装、卸载、升级、查询…

    Linux干货 2016-08-29
  • puppet配置详解

    主程序: facter-2.4.6-1.el7.x86_64.rpm puppet-3.8.7-1.el7.noarch.rpm #agent主机上用的包 puppet-server-3.8.7-1.el7.noarch.rpm 注:yum仓库中不是最新版的,可能会有些差别,最好到ftp上下载最新版的 配置文件:    &nbs…

    Linux干货 2017-08-08