Skip to main content

vi 编辑器

  • 文本:纯文本,ASCII text; Unicode

编辑器种类

  • 行编辑器:sed

  • 全屏编辑器:nano, vim

  • vi: Visual Interface(可视化接口)

  • vim:VI Improved(改进版)

基本模式

  • 编辑模式,命令模式(复制、删除、更改)
  • 输入模式,插入模式(修改内容)
  • 末行模式:内置的命令行接口

打开文件

  • vim [options] [file ..]
  • vim [options] -
  • vim [options] -t tag
  • vim [options] -q [errorfile]

### OPTIONS

  • +n:打开文件后,直接让光标处于第n行的行首
  • +:光标处于末行行首
  • +/PATTERN:打开文件后,直接让光标处于第一个被 PATTERN 匹配到的行的行首

模式转换

  • 编辑模式:默认模式

  • 编辑模式 -->输入模式

    • i: insert, 在光标所在处输入;
    • a:append,在光标所在处后方输入;
    • o:在光标所在处下方打开一个新行;
    • I:光标所在处行首输入;
    • A:光标所在处行尾输入;
    • O:光标所在处的上方打开一个新行
  • 输入模式 --> 编辑模式

    • ESC
  • 编辑模式 --> 末行模式

    • :
  • 末行模式 --> 编辑模式

    • 按下两次 ESC

关闭文件

  • 编辑模式下,

    • ZZ:保存并退出
  • 末行模式下,

    • :w /PATH/TO/SOMEFILE 另存为
    • :q 退出
    • :q! 不保存退出
    • :wq 保存退出, :x
    • :wq
    • :wq! 强制保存退出
    • :x 保存退出

光标跳转:

  • 字符间跳转
  K
H l
j
  • #COMMAND:跳转由#指定的个数的字符

单词间跳转

  • w:下一个单词的词首
  • e:当前或后一个单词的词尾(end)
  • b:当前或前一个单词的词首(back)
  • #COMMAND:跳转有#指定的个数的单词;

行首行尾跳转

  • ^:跳转至行首的第一个非空白字符
  • 0:跳转至行首
  • $:跳转至行尾

行间跳转

  • ng:跳转至n行行首
  • 1G, gg:跳转至首行行首
  • G:跳转至首尾行首
    • 3,12-16:相对12列,绝对16列(包含空白字符)
  • 句间跳转:()
  • 段间跳转:{}

翻屏

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

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

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

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

  • 回车键|k:向文件(尾部|首部)翻一行

编辑命令

字符编辑

  • x:删除光标所在处的字符
  • nx:删除光标所在处起始的n字符
  • xp:交换光标所在处的字符与其后面的字符的位置

替换命令

  • r:替换光标所在处的字符
  • #r:替换成同一个字符

删除命令

  • d:结合光标跳转至字符,实现范围删除;

  • d$, D:删除从光标所在处至行尾

  • d^:删除从光标所在处至行首

  • d0

  • dw,#dw

  • db,#db

  • de,#de

  • dd,#dd:删除光标所在处n行

粘贴命令

  • p:缓冲区中的内容如果为整行,则粘贴粘贴至光标所在处的下一行; 否则,粘贴至当前光标所在处的后方
  • P:缓冲区中的内容如果为整行,则粘贴粘贴至光标所在处的上一行; 否则,粘贴至当前光标所在处的前方

复制命令

  • y$

  • y^

  • y0

  • yy:复制一行

  • #yy:复制光标所在处的#行

  • yw:复制下一个单词的词首之前

  • yb:复制当前或上一个单词的词首之后

  • ye:复制当前或上一个单词的词尾之前

改变命令(change, c)

  • 编辑模式 --> 输入模式,显示删除操作;

  • #cc:删除光标所在处的行,并转换为输出模式;

  • c^

  • c$

  • c0

  • cw

  • cb

  • ce

可视化模式

  • v:按字符选定

  • V:按行选定

  • 结合编辑命令:d, c , y

撤销操作

  • u, #u

撤销此前的撤销

  • Ctrl+r

重复执行前一个编辑操作

  • .

vim自带的练习教程

  • # vimtutor

末行模式

内建的命令行接口

  • 地址定界

    • :START_POS[,END_POS]
    • #:特定的第#行
    • .:当前行
    • $:最后一行
    • #,#:指定行范围,左侧为起始行,右侧为结束行;
    • #,+#:指定行范围,左侧为起始行绝对编号,右侧为相对左侧行号的偏移量;
    • .,$-1 当前行到倒数第一行
    • 1,$ 全文
    • %:全文
    • /pattern/ :从光标所在处起始向文件尾部第一次被模式匹配到的行
      • :/first/,$d
    • /pat1/,/pat2/:光标所在处起始起始,第一次pat1匹配到的行开始,至第一次由pat2匹配到的行结束之间的所有行;可同编辑命令一同使用,实现编辑操作;
    • d(删除),y(复制),c(更改)
    • :w /PATH/TO/SOMEFILE:将范围内的文本保存至指定的文件中;
    • :r /PATH/TO/SOMEFILE:将指定的文件读取写入到当前第5行
  • 查找

    • /PATTERN:从当前光标所在处向文件尾部查找能够被当前模式匹配到的所有字符串
    • ?PATTERN:从当前光标所在处向文件首部查找能够被当前模式匹配到的所有字符串
    • n:下一个,与命令方向相同
    • N:上一个,与命令方向相反
  • 查找并替换

    • s:末行模式的命令;

    • 使用格式::s/要查找的内容/替换的内容/修饰符

      • 要查找内容:可使用基本正则表达式
      • 替换的内容:不能使用正则表达式,但可以引用
      • 如果”要查找的内容“部分在模式中使用分组符号;在“替换为的内容”中使用后向引用;
      • 直接引用查找模式匹配到的全部文本,要使用&符号;
    • 修饰符:

      • i:ignore case
      • g:global,一行中匹配到到多次
      • :%s/search/replace/gi
      • :1,$s/search/replace/gi
    • 分隔符可替换为非常用字符:

      • s@search@replace@
      • s#search#replace#
    • 示例:

      • :%s@\<t\([[:alpha:]]\+\)\>@T\1@g
      • :%s@\<t[[:alpha:]]\+\>@&er@g

vim多文件功能

  • vim file1 file2...

文件间切换

  • :first
  • :next
  • :prev
  • :last

退出所有文件

  • :wqall 保存所有文件退出
  • :qall
  • :wall

多窗口:

  • -o:水平分割窗口
  • -O:垂直分割窗口

窗口间切换:

  • Ctrl+w,方向箭头

注意:单个文件分割为多个窗口进行查看:

  • Ctrl+w, s :水分分割
  • Ctrl+w, v :垂直分割

定制vim的工作特性:

  • 注意:在末行模式下的设定,仅对当前vim进程有效;
  • 永久有效:
    • 全局:/etc/vimrc
    • 用户个人:~/.vimrc
  1. 行号
  • 显示:set number
  • 取消:set nonu
  1. 括号匹配高亮
  • 匹配:set showmatch, set sm
  • 取消:set nosm
  1. 自动缩进
  • 启动:set ai
  • 禁用:set noai
  1. 高亮搜索
  • 启用:set hlsearch
  • 禁用:set nohlsearch
  1. 语法高亮
  • 启用:syntax on
  • 禁用:syntax off
  1. 忽略大小写
  • 启用:set ic
  • 禁用:set noic
  1. tab键缩进
  • 启用:set tabstap=4