vi命令使用详解

1. 三种工作模式

  1. 命令模式:通过命令对文件进行常规操作
  • 打开文件时进入命令模式 (vi的入口)
  • 通过命令对文件进行常规操作,如定位、翻页、复制、粘贴、删除等在图形界面下通过鼠标或快捷键实现的的操作
  1. 末行模式:执行保存、退出等操作
  • 若要退出vi返回控制台,需在末行模式下输入命令 (vi的出口)
  1. 编辑模式:正常编辑文字

三种模式的转换:

命令模式->编辑模式: i;编辑模式->命令模式:Esc

命令模式->末行模式: :;末行模式->命令模式:Esc

关闭文件:

末行模式下,输入wq(即保存后退出)

除了i进入编辑模式外,还提供了以下命令:

命令 英文 功能 常用
i insert 在当前字符前插入文本 常用
I insert 在行首插入文本 较常用
a append 在当前字符后添加文本 \
A append 在行末添加文本 较常用
o \ 在当前行后面插入一空行 常用
O \ 在当前行前面插入一空行 常用

2. 末行模式命令

命令 英文 功能
w write 保存
q quit 退出,如果没有保存,不允许退出
q! quit 强行退出,不保存退出
wq write&quit 保存并退出
x \ 保存并退出

3. 命令模式命令

  1. 上、下、左、右(因为大佬认为应该把手指集中在一个区域)
命令 功能 手指
h 向左 食指
j 向下 食指
k 向上 中指
t 向右 无名指
  1. 行内移动
命令 英文 功能
w word 向后移动一个单词
b back 向前移动一个单词
0 \ 行首
^ \ 行首,第一个不是空白字符的位置
$ \ 行尾
  1. 行数移动
命令 英文 功能
gg go 文件顶部
G go 文件末尾
数字gg go 移动到数字对应行数
数字G go 移动到数字对应行数
:数字 \ 移动到数字对应行数
  1. 屏幕移动
命令 英文 功能
Ctrl+b back 向上翻页
Ctrl+f forward 向下翻页
H Head 屏幕顶部
M Middle 屏幕中间
L Low 屏幕底部
  1. 段落移动
  • vi中使用空行来区分段落
  • 在程序开发中,通常一段功能相关的代码会写在一起(之间没有空行)
命令 功能
{ 上一段
} 下一段
  1. 括号切换
命令 功能
% 括号匹配及切换
  1. 标记
  • 在开发时,某一块代码可能需要稍后处理,此时先使用m增加一个标记,可以在需要时快速地跳转回来
  • 标记名称可以是a~zA~Z之间地任意一个字母
  • 添加了标记的行如果被删除,标记同时被删除
  • 如果在其他行添加了相同标记名称的标记,之前添加的标记会被替换
命令 英文 功能
mx mark 添加标记x
'x \ 直接定位到标记所在位置
  1. 选中文本(可视模式)
命令 模式 功能
v 可视模式 从光标位置开始按照正常模式选择文本
V 可视行模式 选中光标经过的完整行
Ctrl+v 可视块模式 垂直方向选中文本
  • Esc可以放弃选中,回到命令模式
  • 视模式下,可以和移动命令连用,例如:ggVG能过选中所有内容
  1. 撤销和恢复撤销
命令 英文 功能
u undo 撤销上次命令
Ctrl+r redo 恢复撤销的命令
  1. 删除文本
命令 英文 功能
x cut 删除光标所在字符
d(移动命令) delete 删除移动命令对应的内容
dd delete 删除光标所在行,可以ndd复制多行
D delete 删除至行尾
  • 如果使用可视模式已选中了一段文本,dx都可以删除选中文本
  • 命令dx类似与图形界面的剪切操作(Ctrl+x)

删除命令可以和移动命令连用,以下是常见的组合:

  • dw从光标位置删除到单词末尾
  • d0从光标位置删除到一行的起始位置
  • d}从光标位置删除到段乱结尾
  • ndd从光标位置向下连续删除n行
  • d代码行G从光标所在行删除到指定代码行之间的所有代码
  • d‘a从光标所在行删除到标记a之间的所有代码
  1. 复制粘贴
命令 英文 功能
y(移动命令) copy 复制
yy copy 复制一行,可以nyy复制多行
p paste 粘贴
  • vi中的文本缓冲区和系统的剪贴板不是同一个(即在其他软件中使用Ctrl+c复制的内容,不能再vi中通过p粘贴)
  • 可以在编辑模式下使用鼠标右键粘贴
  1. 替换
命令 英文 功能 工作模式
r replace 替换当前字符 命令模式
R replace 替换当前行光标后的字符 替换模式
  • R可以进入替换模式,替换完成后,按Esc可以返回命令模式
  • 替换命令的作用就是不用进入编辑模式,对文件进行轻量级的修改
  1. 缩排和重复执行
命令 功能
>> 向右增加缩进
<< 向左增加缩进
. 重复上次命令
  • 缩排命令在开发程序时,统一增加代码的缩进比较有用
  • 在可是模式下,缩排命令只需要使用一个><
  1. 查找

常规查找

命令 功能
/str 查找str
n 查找下一个
N 查找上一个
  • 如果不想看到高亮现实,可以随便查找一个文件中不存在的内容即可

单词快速匹配

命令 功能
* 向后查找当前光标所在单词
# 向前查找当前光标所在单词
  1. 查找并替换

​ 需要在末行模式下执行:%s///g

​ a. 全局替换

:%s/旧文本/新文本/g

​ b. 可视区域替换

​ 先选中要替换文字的范围

:%s/旧文本/新文本/g

​ c. 确认替换

:%s/旧文本/新文本/gc

​ 会出现提示:

y-yes 替换

n-no 不替换

a-all 替换所有

q-quit 退出替换

l-last 最后一个,并把光标移动到行首

^E 向下滚屏

^Y 向上滚屏

4. 拓展

  1. 连续输入N个同样的字符

​ 例如:输入10个*

​ a. 命令模式下,输入10

​ b. i进入编辑模式

​ c. 输入*

​ d. Esc返回命令模式

  1. 末行命令拓展
命令 英文 功能
:e. edit 会打开内置的文件浏览器,浏览当前目录下的文件
:n 文件名 new 新建文件
:w. 文件名 write 另存为,但是仍然编辑当前文件,并不会切换文件

切换文件之前,必须保证当前这个文件已经被保存!

  1. 分屏命令
命令 英文 功能
:sp[文件名] split 横向增加分屏
:vsp[文件名] verdical split 竖向增加分屏

切换分屏窗口都是基于Ctrl+w这个快捷键,w对应的英文如下:

命令 英文 功能
w window 切换到下一个窗口
r reverse 互换窗口
c close 关闭当前窗口,但是不能关闭最后一个窗口
q quit 退出当前窗口,如果是最后一个窗口,则关闭vi
o other 关闭其他窗口

vi命令使用详解的更多相关文章

  1. Linux 执行文件查找命令 which 详解

    某个文件不知道放在哪里了,通常可以使用下面的一些命令来查找: which  查看可执行文件的位置 whereis 查看文件的位置 locate   配合数据库查看文件位置 find   实际搜寻硬盘查 ...

  2. systemctl命令用法详解

    systemctl命令用法详解系统环境:Fedora 16binpath:/bin/systemctlpackage:systemd-units systemctl enable httpd.serv ...

  3. 批处理中的echo命令图文详解

    批处理中的echo命令图文详解 1. Echo 显示当前ECHO的状态:ECHO ON 或者ECHO OFF 2. ECHO ON 将ECHO状态设置为ON,将显示命令行,也就是前面的C:\>类 ...

  4. Ubuntu kill命令用法详解

    转自:Ubuntu kill命令用法详解 1. kill   作用:根据进程号杀死进程   用法: kill [信号代码] 进程ID   root@fcola:/# ps -ef | grep sen ...

  5. install 命令用法详解

    install 命令用法详解 http://man.linuxde.net/install install命令的作用是安装或升级软件或备份数据,它的使用权限是所有用户.install命令和cp命令类似 ...

  6. dd命令使用详解

    dd命令使用详解 http://www.cnblogs.com/qq78292959/archive/2012/02/23/2364760.html 1.命令简介 dd 的主要选项: 指定数字的地方若 ...

  7. Mysql导入导出工具Mysqldump和Source命令用法详解

    Mysql本身提供了命令行导出工具Mysqldump和Mysql Source导入命令进行SQL数据导入导出工作,通过Mysql命令行导出工具Mysqldump命令能够将Mysql数据导出为文本格式( ...

  8. Mysql数据库导入命令Source详解

    Mysql数据库导入命令Source详解 几个常用用例: 1.导出整个数据库 mysqldump -u 用户名 -p 数据库名 > 导出的文件名 mysqldump -u root -p dat ...

  9. dos下的edit命令使用详解

    dos下的edit命令使用详解 来源:网络 作者:未知 edit命令是一个简单的编辑软件,我们经常用它来编辑一些程序和批处理文件. 比如,我想在c盘根目录下编辑一个简单的批处理文件,要求无论当前盘和当 ...

  10. [转]Mysql导入导出工具Mysqldump和Source命令用法详解

    Mysql本身提供了命令行导出工具Mysqldump和Mysql Source导入命令进行SQL数据导入导出工作,通过Mysql命令行导出工具Mysqldump命令能够将Mysql数据导出为文本格式( ...

随机推荐

  1. java反射机制原理及应用

    java反射机制 反射机制原理示意图 ​ Class.forName(字节码文件) 类.class 对象.getClass() 用法: 根据配置的properties文件(不仅是properties) ...

  2. Pinot2的无人机创新和发展

    目录 1. 引言 2. 技术原理及概念 2.1 基本概念解释 2.2 技术原理介绍 2.3 相关技术比较 3. 实现步骤与流程 3.1 准备工作:环境配置与依赖安装 3.2 核心模块实现 3.3 集成 ...

  3. synchronized中wait、notify的原理与源码

    synchronized中wait.notify的原理与源码 1.wait和notify的流程图 2.JVM源码 java层面wait的方法 public final native void wait ...

  4. pixel 3xl 编译安卓与内核并烧入全流程(含安卓源码部分编译)

    pixel 3xl 编译安卓与内核并烧入全流程(含安卓源码部分编译) 目录 pixel 3xl 编译安卓与内核并烧入全流程(含安卓源码部分编译) 环境搭建 安卓源码下载 一.准备下载环境 1.安装Py ...

  5. 自研ORM 子查询&嵌套查询

    作者 Mr-zhong 代码改变世界.... 一.前言 Fast Framework 基于NET6.0 封装的轻量级 ORM 框架 支持多种数据库 SqlServer Oracle MySql Pos ...

  6. pip install lxml 总是失败

  7. 本地数据local storage和session storage

    随着互联网的快速发展,基于网页的应用越来越普遍,同时也变的越来越复杂,为了满足各种各样的需求,会经常性在本地存储大量的数据, HTML5规范提出了相关解决方案. 本地存储特性 1.数据存储在用户浏览器 ...

  8. Java_Day16_作业

    A:简答题 1.请把我们讲解过的所有类中的方法在API中找到,并使用自己的话进行描述 答案: Map public V put(K key, V value): public void clear() ...

  9. stegsolve与zsteg的使用

    zsteg 介绍:用来检测PNG和BMP中隐藏数据的工具,可以快速提取隐藏信息 使用环境:kali kali自带zsteg,可以用这个指令使用 gem install zsteg 下载完之后查看使用方 ...

  10. 用 perfcollect 洞察 Linux 上.NET程序 CPU爆高

    一:背景 1. 讲故事 如果要分析 Linux上的 .NET程序 CPU 爆高,按以往的个性我肯定是抓个 dump 下来做事后分析,这种分析模式虽然不重但也不轻,还需要一定的底层知识,那有没有傻瓜式的 ...