Vi 的使用

vi 是一个强大的文本编译器。它可以通过不同模式的切换,使用户可以不用鼠标,通过键盘完成对所有文本的操控。

vi 的四种模式:

  • 正常模式(Normal-model)
  • 插入模式(Insert-model)
  • 命令模式(Command-model)
  • 可视模式(Visual-model)

命令行输入 vi,会进入vim 文本编译器的版本,vim 是对 原始 vi 编译器的扩展。可以用命令 man vi获取到相应的帮助。可以在终端输入 vim 进入其主界面。

vi
man vi
vim

vim 的正常模式

光标移动按键:

按键 含义
l or 右箭头 向右移动一个字符
h or 左箭头 移动一个字符
j or 下箭头 移动一个字符
k or 上箭头 移动一个字符
0(零按键) 移动到当前行的行首
$ 移动到当前行的行尾
^ 移动到当前行第一个非空字符
w 移动到下一个单词或标点符号的开头
W 移动到下一个单词开头忽略标点符号
b 移动到上一个单词或标点符号的开头
B 移动到上一个单词开头忽略标点符号
Ctrl + f or Page Down 向下翻一页
Ctrl + b or Page Up 向上翻一页
numberG 移动到第 number 行(例:1G 表示移动到文件的第一行)
G 移动到文件末尾

vi 中的许多命令都可以在前面加上一个数字,比如上面的 G 命令。在命令之前加上一个数字,就可以指定命令执行的次数。例:命令 5j表示将光标下移 5 行。

复制、剪切和粘贴

y 命令用来复制文本,可以将 y 命令和各种光标移动命令结合起来使用:

命令 复制的内容
yy 当前行
5yy 当前行及随后的四行文本(数字表示从当前行开始复制的行数)
y0 从当前光标位置到 行首
y$ 从当前光标位置到 行尾
y^ 从当前光标位置到文本行的第一个非空字符
yW 从当前光标位置到下一个单词的开头
yG 从当前行到文件末尾
y20G 从当前行到文件的第 20 行(数字可以根据自己需求设置)

d命令用来剪切文本,用法和 y命令类似

p 命令用来粘贴文本

  • p 命令把剪切板中的文本粘贴到光标位置之后
  • P 命令把剪切板中的文本粘贴到光标位置之前

删除文本

xd 命令来删除字符。 x 按键会删除光标位置的一个字符。d 按键更通用一些。

命令 删除的文本
x 当前字符
3x 当前字符及其后的两个字符
dd 当前行
5dd 当前行及随后的四行文本
d0 从光标位置开始到当前行的行首
d$ 从光标位置开始到当前行的行尾
d^ 从光标位置开始到文本行的第一个非空字符
dW 从光标位置开始到下一个单词的开头
dG 从当前行到文件末尾
d20G 从当前行到文件的第 20 行

撤销与重做

  • 撤销(后退):u
  • 重做(前进):Ctrl + r

vim 的插入模式

进入插入模式的几种方式:

命令 含义
i 进入插入模式,光标位置不变
I 进入插入模式,光标来到原来光标所在开头位置
a 进入插入模式,光标来到原来光标的下一位置
A 进入插入模式,光标来到原来光标所在结尾位置
o 进入插入模式,光标来到原来光标位置的下一行,原来下面的行依次下移
O 进入插入模式,光标来到原来光标位置的上一行,原来下面的行依次下移

Esc 键退出插入模式。

vim 的命令模式

保存与退出

  • 保存::w <文件名>。例::w /home/a.txt

  • 退出:

    • 退出::q
    • 保存并退出:wq
    • 不保存退出::q!

执行 Linux 命令

在文本编辑的同时,想临时执行 linux 命令,可执行代码::! <命令>。例:查看 IP 地址::!ifconfig

查找与替换

  • 查找

    • 查找一行f 。例:fa表示在当前行查找字符 a
    • 查找整个文件:/ 。 例:/a 表示在全文查找字符 a 。如果查到的字符有多个,可以按 n 来查找下一个匹配的字符;shift + n 用来查找上一个匹配的字符。
  • 替换

    命令::%s/<被替换字符>/<替换成字符>/gc。对该命令的分解如下:

    条目 含义
    : 冒号字符运行一个 ex 命令
    % 指定要操作的行数。%是一个快捷方式,表示从第一行到最后一行。1,5 表示从第一个行到第五行,如果省略文本行的范围,那么操作只对当前行生效。
    s 指定命令,这里是:替换(查找与替换)
    /<被替换字符>/<替换成字符> 查找类型与替换文本
    g 全局。对文本行中所有匹配的字符串执行查找和替换操作。如果省略 g,则只替换每个文本行中第一个匹配的字符串
    c 替换确认。在执行每个替换命令之前,vi 会停下来,通过信息(replace with <替换文本> (y/n/a/q/l/E/Y)?)来要求我们确认这个替换

    例::s/x/a:表示对光标所在行,把 x 替换成 a

    :%s/x/a: 表示对全文,把 x 替换成 a

    :3,5s/x/a:表示对第 3 到 5 行,把 x 替换成 a

    :s/x/a/g:表示对全局,把 x 替换成 a

    替换确认按键如下:

    按键 行为
    y 执行替换操作
    n 跳过当前匹配的实例
    a 对当前及随后所有匹配的字符串执行替换操作
    q or Esc 退出替换操作
    l 执行这次替换并退出
    Ctrl+e, Ctrl+y 分别是向下滚动和向上滚动。用于查看建议替换的上下文

显示行号

  • 显示行号::set nu

  • 取消显示行号::set nonu

    上述命令只能对单次修改生效,当退出再次打开时,恢复原来状态。如果想长期生效,需要修改 vim 的配置文件。

    1. 打开 vim 配置文件。执行命令 vim /etc/vimrc
    2. set nu 写入到配置文件最后一行,并保存。

vim 的可视模式

可视模式主要是用于对重复的大量操作,可以一次性执行完成的一种功能。进入可视模式的三种方式:

命令 行为
v 字符可视模式
V 可视模式
Ctrl+v 可视模式(配合 dI命令可以进行块的便捷操作)

I在当前块的前面插入内容。

d删除当前的块。

Linux 实战技巧 --vi/vim 的使用相关推荐

  1. linux系统中vi/vim文本编辑器的使用简介

    linux系统中vi/vim文本编辑器的使用简介 1. vi/vim简介 ​ vi/vim 是linux系统中最基本的编辑器,类似于windows系统中的记事本,几乎所有的linux开发版本都内置了v ...

  2. Linux入门教程——VI/VIM 编辑器

    前言 本文小新为大家带来 Linux入门教程--VI/VIM 编辑器 相关知识,具体内容包括VI/VIM是什么,VIM的三种工作模式介绍,包括:一般模式,编辑模式,指令模式,以及模式间转换等进行详尽介 ...

  3. Linux 实战技巧

    常用命令 adduser # 以创建 Apache Eagle 用户为例 $ adduser eagle $ passwd eagle # ur password for eagle user # 赋 ...

  4. linux的命令vim,Linux命令:vi | vim命令

    vim - vi 增强版.文本编辑器 格式:vim [options] [file ..] 说明:如果file存在,文件被打开并显示内容,如果文件不存在,当编辑后第一次存盘时创建它 [options] ...

  5. linux 普通用户退出vim,Linux环境下VI/VIM编辑文件时无权限保存的解决方法(普通用户)...

    在Linux环境下,如果直接使用VI/VIM命令编辑没有修改权限的文件时,保存的时候就会提示用户无法进行保存操作,一般的解决方法只能是关闭文件重新以sudo权限打开该文件编辑后再保存(前提是用户具有s ...

  6. Linux 中去除 vi/vim 和 git diff 中的 ^M 问题解决办法

    去除 vi/vim 和 git diff 中的 ^M 问题解决办法 问题现象 初步分析 进一步查看 问题解决 Source Insight dos2unix Nodpad++ Vim sed 命令 综 ...

  7. Linux下编辑器vi/vim的使用介绍

    vi编辑器是所有Unix及Linux系统下标准的编辑器.对Unix及Linux系统的任何版本,vi编辑器是完全相同的. 基本上vi可以分为三种状态,分别是命令模式(commandmode).插入模式( ...

  8. linux里的vi/vim编辑器怎么用

    关于VIM Vim是一个类似于Vi的著名的功能强大.高度可定制的文本编辑器,在Vi的基础上改进和增加了很多特性.Vim是从 vi 发展出来的一个文本编辑器.代码补全.编译及错误跳转等方便编程的功能特别 ...

  9. linux vi打不开文件,在Linux中使用vi/vim打开一个文件时出现的的问题

    1.想想如何vim/etc/profile会出现这种情况,并解决掉这些问题 图一: 图二: 原因: 第一张:由于vi /etc/profile还没有编辑完成,保存退出,突然断电或其他原因导致编辑窗口关 ...

最新文章

  1. 通俗易懂!使用Excel和TF实现Transformer
  2. 如何显示服务器上的图片,显示服务器上的图片怎么写
  3. 我是这样用extern的...
  4. js 利用事件委托解决mousedown中的click
  5. socket:通常每个套接字地址(协议/网络地址/端口)只允许使用一次
  6. ENVI标准库下光谱分析
  7. 设计模式学习02:简单工厂模式、工厂模式以及抽象工厂模式(具体)
  8. 云-腾讯云-云点播:云点播(VOD)
  9. vue-socket.io 对IE浏览器(IE10+)的兼容性修复
  10. Spring框架 教程
  11. 计算机模拟题操作题错误,计算机模拟试卷操作题答案.doc
  12. libyuv 海思平台编译测试
  13. linux CFI接口,Linux系统下的MTD/CFI驱动介绍
  14. 常见的编程语言的特点与应用领域浅谈
  15. 支付宝资金预授权怎么开通详解,芝麻信用免押接口开通,免押领取/免押金租赁设备!
  16. 平面设计的概念是什么,如何理解平面设计的概念
  17. 【分治算法-02】算法经典问题
  18. AnnotationConfigApplicationContext@xxxx has not been refreshed yet
  19. 职业生涯发展理论(精)
  20. layui图标拓展-自定义图标

热门文章

  1. 视频系统部署 kvs
  2. 利用Matlab将任意曲线旋转任意角度
  3. 【原】Java学习笔记025 - 内部类
  4. MySQL数据库day01
  5. 【随心所记】矩阵A的行列式不等于0,是A可逆的充要条件吗?答:是这样的
  6. C# 之 垃圾回收机制
  7. 性能可靠服务器虚拟化,服务器虚拟化下的网络变迁
  8. 如何提取视频中的音频?自用方法介绍
  9. 清华张钹院士专刊文章:迈向第三代人工智能(全文收录)
  10. mysql初始数据库出错_安装MySQL提示initialize database(初始化数据库)错误解决方法...