第四章 Linux文本编辑VIM

文本编辑工具介绍

  • vi:Visual Interface,文本编辑器
  • 文本:ASCII,Unicode
  • 文本编辑种类:
    • 行编辑器:sed
    • 全屏编辑器:nano,vi
    • vim -Vi Improved
  • 其他编辑器:
    • gedit 一个简单的图形编辑器
    • gvim 一个Vim编辑器的图形版本

文本编辑工具vim

打开文件

  • vim [OPTION]… FILE…
    • vim +# :打开文件后,让光标处于第#行,单独+ 默认光标处于行尾
    • vim +/PATTERN 让光标处于第一个被PATTERN匹配的行的行首
    • vim -b file 二进制方式打开文件
    • vim -d file1 file2… 比较多个文件(扩展命令模式:使用qall退出)
    • vim -R file 只读的方式打开文件,如要保存(使用扩展命令模式:wq!
  • vim -e fileex file 直接进入ex模式
  • 如果该文件存在,文件被打开并显示内容,如果该文件不存在,当编辑后第一次存盘时创建它

vim的三种模式

在这里插入图片描述

  • vim:一个模式编辑器
  • 击键行为是依赖于vim的“模式”
  • 三种主要模式:
    • 命令(Normal)模式:默认模式,移动光标,剪切/粘贴文本
    • 插入(Insert)或编辑模式:修改文本
    • 扩展命令(etended command)模式:保存,退出等
  • Esc键 退出当前模式
  • Esc键 Esc键 总是返回到命令模式

命令模式

  • 字符间跳转
    • h:向左
    • j:向下
    • k:向上
    • l:向右
    • #COMMAND:数字+命令 由#指定一次跳转的字符数(例3h:向左跳三个字符)
  • 单词间跳转:
    • w: 下一个单词的词首
    • e:当前或下一个单词的词尾
    • b:当前或前一个单词的词首
    • #COMMAND:数字+命令 由#指定一次跳转的单词数(例3w:下3个单词的词首)
  • 当前页跳转
    • H:页首
    • M:页中间行
    • L:页底
    • zt:将光标所在当前行移动到屏幕顶端
    • zz:将光标所在当前行移动到屏幕中间
    • zb:将光标所在当前行移动到屏幕底端
  • 行首行尾跳转:
    • ^ 跳转至行首的第一个非空白字符
    • 0 数字0跳转至行首
    • $ 跳转至行尾
  • 行间移动:
    • #G 或者扩展命令模式下:#(跳转至第#行)
    • G 最后一行
    • 1Ggg 第一行
  • 句间移动(由.隔开的算句子):
    • ) 下一句 (上一句
  • 段落间移动(中间由空行算段落):
    • } 下一段 { 上一段
  • 替换命令(r,replace)
    • r 替换光标所在处的字符(r 需要的字符)
    • R 切换成REPLACE模式(R 连续替换)
  • 字符编辑
    • x 删除光标处的字符
    • #x 删除光标处起始的#个字符
    • xp 交换光标所在处的字符及其后面字符的位置(x 剪切,p粘贴)
    • ~ 转换大小写
    • J 删除当前行后的换行符
  • 删除命令(d, delet):
    • d 删除命令,可结合光标跳转字符,实现范围删除
    • d$ 删除到行尾
    • d^ 删除到非空 行首
    • d0 删除到行首
    • dw 删除到下一个单词的词首
    • de 删除到下一个单词的词尾
    • db 删除到当前或前一个单词的词首
    • dd #COMMAND 删除#个COMMAND(COMMAND是上面的跳转,移动命令)
    • dd:删除光标所在的行
      • #dd 多行删除(连续删除#行)
    • D:从当前光标位置一直删除到行尾,等同于d$
  • 复制命令(y,yank)
    • y 复制,行为相似于d命令
    • y$ 从光标位置复制到行尾
    • y0 从光标位置复制到行首
    • y^ 从光标位置复制到当前行第一个非空白字符
    • ye 从光标位置复制到下一个单词尾部
    • yw 从光标位置复制到下一个单词首部
    • yb 从光标位置复制到上一个或本单词的首部
    • #COMMAND
    • yy:复制行
      • #yy 复制多行
    • Y:复制整行
  • 粘贴命令(p,paste):
    • p 缓冲区的如果为整行(有换行符),则粘贴当前光标所在行的下方;否则,则粘贴至当前光标所在处的后面
    • P 缓冲区存的如果为整行,则粘贴当前光标所在行的上方;否则,则粘贴至当前光标所在处的前面
  • 改变命令(c,change)
    • c:修改后切换成插入模式
    • 命令模式 — > 插入模式
      • c$
      • c^
      • c0
      • cw
      • ce
      • cb
      • #COMMAND
    • cc:删除当前行并输入新内容,相当于S
      • #cc
    • C:删除当前光标到行尾,并切换成插入模式
  • 100iwang [esc] 粘贴“wang”100次
  • 常见COMMAD
    • y复制,d删除,gU变大写,gu变小写
    • 例如:0y$命令
      • 0 ->先到行头
      • y ->从这里开始拷贝
      • $ ->拷贝到本行最后一个字符
  • di"光标在“光标”之间,则删除""之间的内容
  • yi( 光标在()之间,则复制()之间的内容
  • vi[ 光标在[]之间,则选中[]之间的内容
  • dtx 删除字符直到遇见光标之后的第一个x字符(x是26个字符之间)
  • ytx 复制字符直到遇见光标之后的第一个x字符(x是26个字符之间)
  • ZZ: 保存退出
  • ZQ: 不保存退出

命令模式翻屏操作

  • Ctrl + f 向文件尾部翻一屏
  • Ctrl + b 向文件首部翻一屏
  • Ctrl + d 向文件尾部翻半屏
  • Ctrl + u 向文件首部翻半屏

插入模式

  • i : 当前光标位置开始编辑
  • a:当前光标的后一个位置开始编辑
  • o:当前光标行下面新建空行编辑
  • I: 当前光标所在行的行首开始编辑
  • A:当前光标所在行的行尾开始编辑
  • O: 当前光标所在行的上边新建一个空行开始编辑

扩展命令模式

  • 使用英文的:打开
  • :q:保存
  • :w:保存
  • :wq:保存退出
  • :q!:强制退出
  • :x :保存退出
  • :r filename 读文件内容到当前文件中
  • :w filename : 将当前文件内容写入到另一个文件中
  • :! command:执行Linux命令,回车返回编辑文件
  • :r! command: r(read)读取Linux运行结果到光标下边新建一行
  • 地址定界:
    • :start_pos,end_pos
    • :# 具体第#行,例如:2表示第2行
    • :#,# 从左侧#表示起始行,到右侧#表示结尾行
    • #,+#从左侧#表示的起始行,加上右侧#表示的行数
      • 例如: 2,+3 表示2到5行
    • . 当前行
    • $最后一行
      • .,$-1 当前行到倒数第二行
    • % 全文,相当于1,$
    • /pattern/匹配pattern的行
    • /par1/,/pat2/
      • 从第一次被pat1模式匹配到的行开始,一直到第一次被pat2匹配到的行结束
      • #,/pat/
      • /pat/,%
    • 使用方式:后跟一个编辑命令
      • d: 删除,例如:.d 删除当前行;:.,10 d 删除当前行到第10行
      • y:复制,同上类似
      • w file : 将范围内的行另存到指定文件
      • r file: 在指定位置插入指定文件的所有内容
  • 查找
    • /pattern:从当前光标所在处向文件尾部查找
    • ?pattern:从当前光标所在处向文件首部查找
    • n:与命令同方向搜索
    • N: 与命令反方向搜索
  • 撤销更改
    • u: 撤销最近的更改
    • #u: 撤销之前的多次更改
    • U: 撤销光标落在这行后所有此行的更改
    • Ctrl -r:重作最后的“撤销”更改
    • .:重复前一个操作
    • #.:重复前一个操作#次
  • 替换
    • 在扩展命令模式下完成查找替换操作
      • 格式: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,以此类推。数字寄存器不能再不同会话间共享

标记和宏(macro)

  • ma :将当前位置标记为a,26个字母均可做标记,mb,mc等等
  • 'a:跳转到a标记的位置,实用的文档内标记方法,文档中跳跃编辑时很有用
  • qa:录制宏a,a为宏的名称
  • q:停止录制宏
  • @a:执行宏a
  • @@:重新执行上次执行的宏

编辑二进制文件

  • 以二进制方式打开文件
    • vim -b binaryfile
  • 扩展命令模式下,利用xxd命令转换为可读的十六进制
    • :%!xxd
  • 插入模式下,编辑二进制文件
  • 扩展命令模式下,利用xxd命令转换回二进制文件
    • :%!xxd -r
  • 保存退出

可视化模式

  • 允许选择文本块
    • v 面向字符
    • V 面向行
    • Ctrl -v 面向块
  • 可视化键可用于与移动键结合使用
    • w ) } 箭头等
  • 突出显示的文字可被删除,复制,变更,过滤,收索,替换等

vim -o file1 file2 :打开两个文件

使用多个“窗口”

  • 多文件分割
    • 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,简写 setnonu
  • (2)忽略字符的大小写
    • 启用:set ignorecase,简写set ic
    • 不忽略:set noic
  • (3)自动缩进
    • 启用:set autoindent,简写set ai
    • 禁用:set noai
  • (4)复制保留格式
    • 启用:set paste
    • 禁用:set nopaste
  • (5)显示Tab和换行符^I和显示$显示
    • 启用:set list
    • 禁用:set nolist
  • (6)高亮搜索
    • 启用:set hlsearch
    • 禁用:set nohlsearch
  • (7)语法高亮
    • 启用:syntax on
    • 禁用:syntax off
  • (8)文件格式
    • 启用windows格式:set fileformat=dos
    • 启用unix格式:set fileformat=unix
    • 简写 set ff=dos|unix
  • (9)设置文本宽度
    • set textwidth=65(vim only)
    • setwrapmargin=15
  • (10)设置光标所在行的标识线
    • 启用:set cursorline ,简写set cul
    • 禁用:set nocursorline
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章