vi和vim编辑器

1、vi 和vim 的基本介绍

  所有的 Linux 系统都会内建 vi 文本编辑器。

  Vim 具有程序编辑的能力,可以看做是Vi的增强版本,可以主动的以字体颜色辨别语法的正确性,方便程序设计。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。

2、vi 和vim 常用的三种模式

  1)、正常模式:

    以 vim 打开一个档案就直接进入一般模式了(这是默认的模式)。在这个模式中, 你可以使用『上下左右』按键来移动光标,你可以使用『删除字符』或『删除整行』来处理档案内容,也可以使用『复制、贴上』来处理你的文件数据。

  2)、插入模式:

    按下i, I, o, O, a, A, r, R等任何一个字母之后才会进入编辑模式, 一般来说按i即可

  3)、命 令行模式

    在这个模式当中, 可以提供你相关指令,完成读取、存盘、替换、离开 vim 、显示行号等的动作则是在此模式中达成的

3、vi 和vim 模式的相互切换

  

 4、基本快捷键

  1. 拷贝当前行 yy,拷贝当前行向下n行 nyy
  2. 粘贴 p
  3. 删除当前行 dd,删除当前行向下的n行ndd
  4. 设置行号,取消行号 【:set nu】和【:set nonu】
  5. 到文档最末行【G】
  6. 到文档最首行【gg】
  7. 撤销输入的内容 【u】
  8. 将光标移到n行
    1. 显示行号 【:set nu】
    2. 输入n这个数
    3. 输入【shift+g】

5、光标的移动

  1)、基本移动

  以下移动都是在normal模式下。

  • h或退格: 左移一个字符;
  • l或空格: 右移一个字符;
  • j: 下移一行;
  • k: 上移一行;
  • gj: 移动到一段内的下一行;
  • gk: 移动到一段内的上一行;
  • +或Enter: 把光标移至下一行第一个非空白字符。
  • -: 把光标移至上一行第一个非空白字符。
  • w: 前移一个单词,光标停在下一个单词开头;
  • W: 移动下一个单词开头,但忽略一些标点;
  • e: 前移一个单词,光标停在下一个单词末尾;
  • E: 移动到下一个单词末尾,如果词尾有标点,则移动到标点;
  • b: 后移一个单词,光标停在上一个单词开头;
  • B: 移动到上一个单词开头,忽略一些标点;
  • ge: 后移一个单词,光标停在上一个单词末尾;
  • gE: 同 ge ,不过‘单词’包含单词相邻的标点。
  • (: 前移1句。
  • ): 后移1句。
  • {: 前移1段。
  • }: 后移1段。
  • fc: 把光标移到同一行的下一个c字符处
  • Fc: 把光标移到同一行的上一个c字符处
  • tc: 把光标移到同一行的下一个c字符前
  • Tc: 把光标移到同一行的上一个c字符后
  • ;: 配合f & t使用,重复一次
  • ,: 配合f & t使用,反向重复一次

  上面的操作都可以配合n使用,比如在正常模式(下面会讲到)下输入3h, 则光标向左移动3个字符。

  • 0: 移动到行首。
  • g0: 移到光标所在屏幕行行首。
  • ^: 移动到本行第一个非空白字符。
  • g^: 同 ^ ,但是移动到当前屏幕行第一个非空字符处。
  • $: 移动到行尾。
  • g$: 移动光标所在屏幕行行尾。
  • n|: 把光标移到递n列上。
  • nG: 到文件第n行。
  • :n<cr> 移动到第n行。
  • :$<cr> 移动到最后一行。
  • H: 把光标移到屏幕最顶端一行。
  • M: 把光标移到屏幕中间一行。
  • L: 把光标移到屏幕最底端一行。
  • gg: 到文件头部。
  • G: 到文件尾部。

  2)、翻屏

  • ctrl+f: 下翻一屏。
  • ctrl+b: 上翻一屏。
  • ctrl+d: 下翻半屏。
  • ctrl+u: 上翻半屏。
  • ctrl+e: 向下滚动一行。
  • ctrl+y: 向上滚动一行。
  • n%: 到文件n%的位置。
  • zz: 将当前行移动到屏幕中央。
  • zt: 将当前行移动到屏幕顶端。
  • zb: 将当前行移动到屏幕底端。

  3)、查找

  • /something: 在后面的文本中查找something。
  • ?something: 在前面的文本中查找something。
  • /pattern/+number: 将光标停在包含pattern的行后面第number行上。
  • /pattern/-number: 将光标停在包含pattern的行前面第number行上。
  • n: 向后查找下一个。
  • N: 向前查找下一个。
  可以用grep或vimgrep查找一个模式都在哪些地方出现过,
  其中:grep是调用外部的grep程序,而:vimgrep是vim自己的查找算法。
  用法为: :vim[grep]/pattern/[g] [j] files
  g的含义是如果一个模式在一行中多次出现,则这一行也在结果中多次出现。
  j的含义是grep结束后,结果停在第j项,默认是停在第一项。
  vimgrep前面可以加数字限定搜索结果的上限,如
  :1vim/pattern/ % 只查找那个模式在本文件中的第一个出现。
 
  其实vimgrep在读纯文本电子书时特别有用,可以生成导航的目录。
  比如电子书中每一节的标题形式为:n. xxxx。你就可以这样:
  :vim/^d{1,}./ %
  然后用:cw或:copen查看结果,可以用C-w H把quickfix窗口移到左侧,
  就更像个目录了。
  4)、替换
  • :s/old/new - 用new替换当前行第一个old。
  • :s/old/new/g - 用new替换当前行所有的old。
  • :n1,n2s/old/new/g - 用new替换文件n1行到n2行所有的old。
  • :%s/old/new/g - 用new替换文件中所有的old。
  • :%s/^/xxx/g - 在每一行的行首插入xxx,^表示行首。
  • :%s/$/xxx/g - 在每一行的行尾插入xxx,$表示行尾。
  • 所有替换命令末尾加上c,每个替换都将需要用户确认。 如:%s/old/new/gc,加上i则忽略大小写(ignore)。
  还有一种比替换更灵活的方式,它是匹配到某个模式后执行某种命令,
  语法为 :[range]g/pattern/command
  例如 :%g/^ xyz/normal dd。
  表示对于以一个空格和xyz开头的行执行normal模式下的dd命令。

  关于range的规定为:

  • 如果不指定range,则表示当前行。
  • m,n: 从m行到n行。
  • 0: 最开始一行(可能是这样)。
  • $: 最后一行
  • .: 当前行
  • %: 所有行

  

原文地址:https://www.cnblogs.com/zyc-blogs/p/11515629.html