{{ cat }}'s docs

8.1.0: 编辑工具-vi&vim


1. vim简介

vim是从vi发展出来 ,第一个版本由布莱姆·米勒在1991年发布 ,它基于VIM许可证,兼容GPL。 官网 www.vim.org

2. vim

作用:多数发行版内置的文本编辑器
安装方法:
yum install -y vim-enhanced
yum install -y vim-*(用通配符来找到以"vim-"开头的包来安装)

语法:

  • vim filename
  • vim +n filename,n是数字,可以定位到该文件的第n行,多用于程序调试

1) 模式类别及其快捷键:

  1. 一般模式

    进入方式:
    按下"Esc"键及刚用vim打开一个文件时

    可执行操作:
    移动光标,删除内容,复制,粘贴。

    光标位移动
    "h"和"←"、"j"和"↓"、"k"和"↑"、"l"和"→",四组分别代表向左、下、上、右各移动一个字符
    "space",空格键代表向右移动一个字符,跟"l"和"→"不同的是,空格键在遇到换行符的时候换行
    PS:先输入数字n后面跟上面相应的快捷键,代表向相应方向移动该数字个位

    光标页移动
    Ctrl+f或pagedown键 屏幕向前移动一页
    Ctrl+b或pageup键 屏幕向后移动一页
    光标精准移动
    "0" 移动到本行行首
    "^" 移动到本行行首的第一个非空字符
    "$" 移动到本行行尾
    "H"移动到本显示屏的最上面一行首字母
    "L"移动到本显示屏的最下面一行首字母
    "gg" 移动到文档首行首字母
    "G" 移动到尾行首字母
    "nG" 移动到第n行
    复制、粘贴与删除、还原
    "x,X" x向后删除一个字符,X向前删除一个字符
    "nx" 向后删除n个字符
    "dd" 删除/剪切光标所在的那一行(dd后可以直接p,相当于剪切)
    "ndd" 删除/剪切光标所在行起向下一共n行
    "D" 删除光标后面的内容(dw)
    "yy" 复制光标所在行
    "nyy" 从光标所在行算起向下复制n行
    "p" 从光标所在行向下粘贴已经复制或者粘贴的内容
    "P" 从光标所在行向上粘贴已经复制或者粘贴的内容
    "u" 还原上一步操作
    "ctrl+r" 与"u"相反的操作
    "v" 按v后移动光标会选中指定字符,然后可以复制、粘贴等
    "V" 整行选中光标所跨越的行
    "ctrl+v" 块状选中字符,可用于选中几列

  2. 编辑模式

    进入方式:
    (i, I, a, A, o, O, r, R)按下任意一个键,想退回到一般模式时按下Esc即可。

    可执行操作:
    输入内容
    i 在当前字符前插入
    I 在光标所在行行首插入
    a 在当前字符后插入
    A 在当前行行尾插入
    o 在当前行的下一行插入新的一行
    O 在当前行的上一行插入新的一行

  3. 命令模式

    进入方式:
    在一般模式下,输入 ":" 、"/"或"?" 即可进入命令模式。

    可执行操作:
    搜索、替换、保存、退出、显示行号、禁止高亮显示等。

    查找和替换
    /word
    寻找字符串word,按n将光标移动至下一个匹配项首字母,按N则相反

    ?word
    与/word功能相同,只不过n和N的光标移动方向颠倒过来

    :n1,n2s/word1/word2/g
    "n1,n2" 代表在n1,n2行之间作为搜索范围,"1,$"和"%"代表搜索整个文档;
    "s" "search"的缩写,其后紧跟的第一个字符作为隔断符,一般为"/"、"$"、"@"或"#",但不限于;
    "word1"与"word2" 代表"被替换的内容"与"替换的内容";
    "g" "global"的缩写,代表替换此文档内搜索到所有关键字,如过没有,则只替换每行的第一个关键字
    PS:g换成数字n可以替换每行的前n个

    保存及退出
    :w 保存文本
    :q 退出vim
    :w! 强制保存,在root用户下即使文本只读也可以完成保存
    :q! 强制退出,所有改动不生效
    :wq 保存并退出
    ZZ 等同于:wq

    其他命令
    :set nu 显示行号
    :set nonu 不显示行号
    :nohl 不高亮显示查询结果
    :x和wq的区别,:x只在文件内容真正修改过之后才保存,:wq不管文件内容是否修改,都重新写入文档,使文件的mtime产生改变。

3. vim练习题

# cp  /etc/init.d/iptables  /tmp/1.txt
# vim 1.txt
  • 1). 分别向下、向右、向左、向右移动5个字符
  • 2). 分别向下、向上翻两页
  • 3). 把光标移动到第49行
  • 4). 让光标移动到行末,再移动到行首
  • 5). 移动到1.txt文件的最后一行
  • 6). 移动到文件的首行
  • 7). 搜索文件中出现的 iptables 并数一下一共出现多少个
  • 8). 把从第一行到第三行出现的iptables 替换成iptable
  • 9). 还原上一步操作
  • 10). 把整个文件中所有的iptables替换成iptable
  • 11). 把光标移动到25行,删除字符 "$"
  • 12). 还原上一步操作
  • 13). 删除第50行
  • 14). 还原上一步操作
  • 15). 删除从37行到42行的所有内容
  • 16). 还原上一步操作
  • 17). 复制48行并粘贴到52行下面
  • 18). 还原上一步操作
  • 19). 复制从37行到42行的内容并粘贴到44行上面
  • 20). 还原上一步操作(按两次u)
  • 21). 把37行到42行的内容移动到19行下面
  • 22). 还原上一步操作
  • 23). 光标移动到首行,把/bin/sh 改成 /bin/bash
  • 24). 在第一行下面插入新的一行,并输入"# Hello!"
  • 25). 保存文档并退出

Contents