Linux系统中的vi/vim指令【详解】
vi是Unix世界里极为普遍的全屏幕文本编辑器,vim是它的改进版本Vi IMproved的简称。几乎可以说任何一台Unix机器都会提供这套软件。
只要简单的在Shell下执行vi就可以进入 vi 的编辑环境。在实际操作之前先对它有个了解会比较好。
vi 有两种模式,输入模式以及指令模式。输入模式即是用来输入文字资料,而指令模式则是用来下达一些编排文件、存档、以及离开 vi 等等的操作指令。当执行 vi 后,会先进入指令模式,此时输入的任何字元都视为指令。
第一步:
1、文本编译工具vi使用
vi的名字取自于visual,意为“直观”,它是一个全屏幕编辑程序。还有gedit、emacs在Linux系统中vi是最常用的编辑程序,它的文本编辑功能十分强大,但使用起来比较复杂。
2、Linux系统中的vi其实是vim,是vi的增强版。vi编辑程序有两种工作模式:
命令模式(指令模式):此模式下的按键当作指令来处理。
输入模式:此模式的按键作为真正的输入。
第二步:
vi操作模式的切换,要进入输入模式,可以按如下命令键:
新增:‘a’,从光标后开始输入文本。‘A’,从光标所在行末尾输入新的文本。
插入:‘i’,从光标前开始插入文本。‘I’,从光标行的第一个非空格字符前开始插入文本。
开始:‘o’,从光标所在行下新增一行并进入输入模式。‘O’,从光标所在行上新增一行并进入输入模式。
第三步:
从输入模式按ESC进入命令模式
第四步:
进入和退出vi
进入vi,在提示符下:
vi
vi 文件名
退出vi,在指令模式下:
:q,退出
:wq,存盘后退出
:q!,不存盘强制退出
:x,强制存盘退出
第五步:
删除和修改文本
指令模式下:
x:删除光标处的一个字符
dd:删除光标所在行
r:修改光标所在字符
R:进入改写状态
s:删除光标所在字符,并进入输入状态
S:删除光标所在行,并进入输入状态
第六步:
光标移动
1、指令模式下:
h:向左移动一列
j 或+:向下移动一行
k 或-:向上移动一行
l:向右移动一列
组合:nh,nj,nk,nl。分别是移动n行(列)
在有方向键的键盘上,无论指令模式或输入模式都可以用方向箭头来移动光标
2、光标按行移动
指令模式下:
:n回车:将光标移动到第n行
:$回车或者L:将光标移动到最后一行
M:将光标移动到中间一行
H:将光标移动到第一行
:set number:显示行号
:set nonumber:取消显示行号
3、光标按单词移动
指令模式下:
w:将光标移动到下一个单词头
b:将光标移动到前一个单词头
e:将光标移动到下一个单词尾
组合:nw、nb、ne
4、光标按字符移动
指令模式下:
$:将光标移动到当前行尾
^或0:将光标移动到当前行首
n|:将光标移动到当前行的第n个字符
fm:将光标移动到当前行的下一个字符m处
光标返回原处
两个单引号‘’
第七步:
文本编辑
1、翻页
指令模式下:
Ctrl+d:下翻半屏
Ctrl+u:上翻半屏
Ctrl+f:下翻一屏
Ctrl+b:上翻一屏
2、查找
指令模式下:
/string:从当前位置向前查找字符串string
?string:从当前位置向后查找字符串string
继续查找:
n:沿前述查找方向继续查找同一字符串
N:沿前述查找方向的反方向继续查找同一字符串
3、删除文本
指令模式下:
x:删除字符
dw:删除单词
dd:删除行
D:删除从光标到行末所有字符
dfm:删除从光标到第一个字符m间的文本
:5d:删除第5行
:5,$d:删除从第5行到最后一行
可以和整数n组合
4、撤销和重复命令
指令模式下:
u:撤销最后一个更改操作
U:撤销对本行的所有修改
5、文本替换
指令模式下:
m:替换当前字符为m,替换后仍为命令模式
R:替换当前字符后的一系列字符,替换后变为输入模式。
s:多个字符替换单个字符
cw:单词替换
cc:行替换
C:替换当前行剩余部分
cfm:替换当前字符到指定的字符m
6、文本删除与替换对比
命令类型 删除 替换
字符 x r
单词 dw cw
行 dd cc
从光标到行尾 D C
从光标到字符m dfm cfm
7、全局替换
指令模式下:
搜索当前行的第一个实例
:s/bash/sch把当前行的第一个bash换为sch
搜索指定行的第一个实例
:1,10s/bash/sch 把1到10行bash换为sch
:5,$s/bash/sch 把5到末行bash换为sch
设置过滤条件进行搜索
:g/var/s/bash/sch把包含var行中的bash替换为sch
同一行中替换所有实例
:s/bash/sch/g把当前行中所有bash替换为sch
替换整个文件中的所有实例
:1,$s/bash/sch/g把整个文件中的bash替换为sch
8、移动和复制文本
指令模式下:
yy:复制当前行
dd:剪切当前行(删除)
p、P:粘贴当前行

9、复制和移动文本块
指令模式下:
把某(几)行复制并粘贴到某行后
:5 copy8 把5行复制并粘贴到第8行后
:1,5 copy$ 把1-5行复制并粘贴到末行后
:.,$ copy0 把当前行到末行复制并粘贴到文件头
把copy改为move即为移动文本块(注:.表示当前行,0表示文件头,$表示文件尾)
第八步:
文件保存
指令模式下:
:w 保存文件
:wq或者:x或者ZZ 保存并退出vi,返回linux提示符
:w f1.c 把当前文件另存为f1.c
:q! 放弃对文件的保存,直接退出
1、保存文本块
指令模式下:
:2,5 write f2 把第2到第5行另存为文件f2
保存文本块,并直接覆盖掉已有(如果有)文件
:2 write! f2 把第2行强行另存为文件f2
向文件追加文本
:2 write >> f2 把第2行追加到文件f2末尾
第九步:
与shell交互
指令模式下:
读某文件的内容到当前打开文件
:5 read a 把文件a中的内容读到当前打开文件的第5行后
在vi中执行shell命令
:!pwd
在vi中执行shell命令,并把结果添加到vi中
:5 read! pwd把pwd执行结果插入到第5行后
:e 在vi中编辑某文件时,不退出vi而建立新文件
:n 在vi中编辑某文件时,不退出vi而加载新文件
Linux系统中的vi/vim指令【详解】的更多相关文章
- linux系统的任务计划crontab使用详解
linux系统的任务计划crontab使用详解 其实大部分系统管理工作都是通过定期自动执行某一个脚本来完成的,那么如何定期执行某一个脚本呢?这就要借助linux的cron功能了. 关于cron任务计划 ...
- C#中的预处理器指令详解
这篇文章主要介绍了C#中的预处理器指令详解,本文讲解了#define 和 #undef.#if.#elif.#else和#endif.#warning和#error.#region和#endregio ...
- Linux系统下权限管理和命令详解
下面对linux系统下的有关权限操作命令进行了梳理总结,并配合简单实例进行说明.linux中除了常见的读(r).写(w).执行(x)权限以外,还有其他的一些特殊或隐藏权限,熟练掌握这些权限知识的使用, ...
- nginx.conf中关于nginx-rtmp-module配置指令详解
译序:截至 Jul 8th,2013 官方公布的最新 Nginx RTMP 模块 nginx-rtmp-module 指令详解.指令Corertmp语法:rtmp { ... }上下文:根描述:保存所 ...
- linux内核中send与recv函数详解
Linux send与recv函数详解 1.简介 #include <sys/socket.h> ssize_t recv(int sockfd, void *buff, size_t n ...
- 一文详解 Linux 系统常用监控工一文详解 Linux 系统常用监控工具(top,htop,iotop,iftop)具(top,htop,iotop,iftop)
一文详解 Linux 系统常用监控工具(top,htop,iotop,iftop) 概 述 本文主要记录一下 Linux 系统上一些常用的系统监控工具,非常好用.正所谓磨刀不误砍柴工,花点时间 ...
- Linux系统中用户组、文件权限浅解
用户组 在linux中的每个用户必须属于一个组,不能独立于组外.在Linux中每个文件有所有者.所在组.其它组的概念. [所有者] 一般为文件的创建者,谁创建了该文件,就天然的成为该文件的所有者,用& ...
- linux系统下的rz、sz详解
对于linux服务器来说,通常我们是通过一些ssh工具进行远程访问连接的,而对于经常使用它的人来说,少不了将文件上传下载到服务器.如何能够快速的同服务器进行文件的交互尤为重要.不然每次都打开单独的ss ...
- Linux—vi/vim命令详解
如何在 vi 里搜索关键字 在命令模式下敲斜杆( / )这时在状态栏(也就是屏幕左下脚)就出现了 "/" 然后输入你要查找的关键字敲回车就行了. 如果你要继续查找此关键字,敲字符 ...
随机推荐
- MySQL--主从数据库同步原理
主从数据库的复制原理:摘自MySQL官网 1. 异步 * 主在执行sql之后,记录二进制bin-log文件. * 同时从连接主服务器,并从主获取binlog,存于本地relay-log,并从上次记 ...
- 01_Mac下安装homebrew
参考:https://jingyan.baidu.com/album/fec7a1e5ec30341190b4e7e5.html?picindex=3 1.在打开的命令行工具中输入如下语句: ruby ...
- 常量、变量、数据类型 搞错N+1次 累死
public class hello { /** * * * * * @param args */ public static void main(String[] args) { String _$ ...
- 如何使用idea把web项目打成war包
如果是maven项目,打成war包很容易,如果是web项目,需要这样子 1. 2. 3. output directory是war包的目录 4.重新选择 第一步的操作,选择build即可.
- shell 脚本解压war包+备份+tomcat自动关闭+启动
公司的开发环境每次替换war包时候,老是需要重新上传并且手动解压,然后再去重启tomcat.觉得这样子太麻烦了,于是写了一个shell脚本,自动解压+备份+tomcat自动关闭+启动.代码如下: #关 ...
- 利用Grahics 进行图片裁剪
这两天做了一个图片对比工具,里面要处理两张大的图片,所以要对图片先进行裁剪最开始用了 /// <summary> /// 裁剪图片 /// </summa ...
- Linq批量建表
public JsonResult CreateTable() { db = new RZBDbContext(); var query = (from c in db.Clients select ...
- .net正在终止线程异常
try{sting host = context.Request.UrlReferrer.Host;if ( 程序判断){ context.Response.Clear();context.Respo ...
- SSH框架里的iHiberBaseDAO类与iHiberDAOImpl写法
一.iHiberBaseDAO类 package basic; import java.util.*; /** * 基于hibernate技术实现的BaseDAO基类 * @author ZHANGY ...
- vue + element-ui 制作下拉菜单(可配置路由、可根据路由高亮list、可刷新自动展开定位路由)
本篇文章分享一篇关于 vue制作可路由切换组件.可刷新根据路由定位导航(自动展开).可根据路由高亮对应导航选项 一.实现的功能如下: 1.可折叠导航面板 2.点击导航路由不同组件 ...