–作为了一个使用Linux服务器的程序员来说,vi/vim是必学的编辑器了,好记性不如烂笔头,这里做一个学习的笔记。

简介

vi 是一款文本编辑器。vim则是在vi的基础上加入了更多的功能。 使用vi/vim,vi: vi [file] vim:vim [file] 就可以打开vi/vim的界面。

模式

vi/vim 给使用者提供了三种模式,一般指令模式、编辑模式和命令行模式。

  • 一般指令模式(command mode) 用vi打开一个文件,首先进入的就是默认的一般指令模式。一般指令模式可以使用一些 命令 进行复制粘贴删除等等的操作。
  • 编辑模式(insert mode) 在默认的一般指令模式界面中,使用键盘中的"i"键就可以进入编辑模式,使用esc按键可退回一般指令模式,这个模式下可以正常的字符操作的文本编辑了。
  • 命令行命令模式(command-line mode) 命令行模式要区分一下一般指令模式,输入":“键就可以进入该模式,此时光标会移动到文本的最后一行。这个模式可以提供搜索,保存,退出,替换等功能。

切换说明:

  • 一般指令模式 切换到 编辑模式
  • i:光标在当前字符的左侧
  • I:光标在当前行的顶头
  • o:光标所在行上新建一行
  • O:光标所在行下新建一行
  • a:光标在当前字符的下一个字符左侧
  • A:光标所在当前行的最后
  • r : 光标所在当前字符替换
  • R:光标在当前字符左侧 ** 注意:除了 r R 以上都是插入模式(–INSERT–)只有r R是替换模式(–REPLACE–)rR 的区别是 r 只能替换一次字符,而 R 可以连续的替换 **

<!–more–>

  • 一般指令模式 切换到 命令行命令模式

  • ::可输入指令

  • / :可输入搜索关键词向下搜索

  • ?:可输入搜索光见此向上搜索

  • 编辑模式 退回到 一般指令模式 [exit]:输入键盘上的[exit]键退出编辑模式回到一般指令模式

  • 命令行命令模式 退回到 一般指令模式 [exit]:输入键盘上的[exit]键退出一般命令行模式回到一般指令模式

切换表格

insert model command model command-line model
i I o O a A r R <- -> “:”,”/","?"
[exit] -> <- [exit]

vi的操作

界面

vi编辑器的主界面是文件内容的主体,游标以及右下角的提示(显示当前文件名以及行数和字符数,当切换模式后显示当前的模式相关提示)

编辑模式

编辑模式顾名思义,就是利用键盘的按键进行编辑,除了使用 [ESC] 按键退出编辑模式,其他的与windows系统下的记事本无异,主要的命令集中在一般指令模式和命令行模式,如下文

一般指令模式

  • 移动光标

  • 光标的移动

    • k/ : 光标向上移动
    • l / : 光标向右移动
    • j / : 光标向下移动
    • h / : 光标向左移动
    • nk/ n↑… : n为移动的单位,例如2k或者2↑向上移动2行,其它的都方向类似
  • 光标的行移动

    • + : 光标向下移动一行
    • - : 光标向上移动一行
    • H : 移动到屏幕的第一行的第一个字符
    • M : 移动到屏幕中间一行的第一个字符
    • L : 移动到屏幕最后一行的第一个字符
    • gg : 移动到文件第一行的第一个字符
    • G : 移动到文件最后一行的第一个字符
    • nG : 移动到文件第n行的第一个字符
    • n<Enter> : 向下移动光标到n行的第一个字符
  • 光标的列移动

    • 0 / [HOME] : 光标移动到当前列顶字符处
    • $ / [End] : 光标移动到当前列尾字符处
    • n<space> : 光标移动到当前列的第n个字符
  • 翻页查询

  • [Ctrl] + [f] / [Page Down] : 向下翻页

  • [Ctrl] + [b] /  [Page Up] : 向上翻页

  • [Ctrl] + [d] : 向下翻半页

  •  [Ctrl] + [u] : 向上翻半页

  • 删除数据

  • xX : 向后、向前删除一个字符

  • nxnX : 向后、向前删除连续n个字符

  • d0d$ : 向前、向后删除到列首列尾连续的字符

  • d+ d- : 向上、向下删除一列

  • dd : 删除光标所在当前列

  • ndd : 删除光标所在列向下n列

  • dGdgg: 删除光标所在列向上到文件第一行和文件最后一行

  • dnG : 删除光标所在列到第n列

  • 复制与粘贴

  • y0y$ : 向前、向后复制到列首列尾连续的字符

  • y+ y- : 向上、向下复制一列

  • yy : 复制光标所在当前列

  • nyy : 复制光标所在列向下n列

  • yGygg: 复制光标所在列向上到文件第一行和文件最后一行

  • ynG : 复制光标所在列到第n列

  • p P: 删帖到当前列的上和下一列

  • 撤销与前进

  • u : 撤退

  • [Ctrl]+r : 前进

  • 其他指令

  • . : 继续上一个动作

  • J : 将光标所在列与下一列的数据结合成同一列

命令行命令模式

  • 搜索与替换

  • :word : 向下搜索word关键词, n 是继续word关键词向下搜索, N 是继续word关键词向上搜索

  • ?word : 向上搜索word关键词, n 是继续word关键词向下搜索, N 是继续word关键词向上搜索

  • :n1,n2s/word1/word2/g : n1列到n2列替换所有的word1为word2

  •  :G,$s/word1/word2/g : 从一列到最后一列替换所有的word1为word2

  • :n1,n2s/word1/word2/gc :n1列到n2列替换所有的word1为word2,但是以询问模式询问是否替换,以及其他操作

  • 设置编辑环境

  • :set nu : 显示行号

  • :set nonu : 不显示行号

  • 文件操作

  • :w : 保存当前文件

  • :w [filename] : 保存当前文件为文件名filename

  • :r [filename] : 读取文件件名为filename

  • :q : 退出编辑

  • :w! q! : 强制保存与强制退出

  • ZZ : 退出编辑,如果文件有修改则保存后退出

  • :n1,n2 w [filename] : 将n1 n2 文件读取并存入filename文件中

  • 其他命令行命令

  • :! command : 可以在!后输入linux命令

vim的操作

界面

除了vi的界面,还所了光标所在行字符的位置。并且文件内容区会根据文件类型有颜色显示

功能

  • 区块选择

  • v : 字符反白

  • V : 列反白

  • [ctrl] + v : 区块反白

  • y : 复制反白

  • d : 删除反白

  • p : 粘贴复制的反白字符

  • 多文件编辑 如何打开多个文件请参照vi命令

  • :n : 编辑下一个文件

  • :N : 编辑上一个文件

  • :files : 列出目前这个 vim 的打开的所有文件

  • 多窗口编辑

  • :sp [filename] : 新建一个并列窗口打开filename

  • [ctrl] + w + 方向键 : 切换编辑窗口

  • [ctrl] + q : 退出当前编辑窗口

  • 补全功能 这里做简单的介绍,使用前需要开启代码补全的,参考: :help ins-completion :help compl-omni :help ‘omnifunc’ :help i_CTRL-X_CTRL-O :help ins-completion-menu :help popupmenu-keys :help ‘completeopt’ :help compl-omni-filetypes :help omnicppcomplete.txt

  • [ctrl]+x -> [ctrl]+n : 通过目前正在编辑的这个“文件的内容文字”作为关键字, 以补齐

  • [ctrl]+x -> [ctrl]+f : 以当前目录内的“文件名”作为关键字, 以补齐

  • [ctrl]+x -> [ctrl]+o : 以扩展名作为语法补充,以 vim 内置的关键字, 以补齐

** 结束语:vi/vim通过添加插件还可以实现更炫酷的功能,但常用的使用以上的学习笔记应该是足够用的 **