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 里搜索关键字 在命令模式下敲斜杆( / )这时在状态栏(也就是屏幕左下脚)就出现了 "/" 然后输入你要查找的关键字敲回车就行了. 如果你要继续查找此关键字,敲字符 ...
随机推荐
- 并发包交换数据Exchanger
/** * * @描述: 用于实现两个人之间的数据交换,每个人完成一定的事务后想与对方交换数据,第一个先拿出数据的人一直等待 * 直到第二个人拿到数据 到来时,才能彼此交换数据. * @作者: Wnj ...
- HTML,javascript,image等加载,DOM解析,js执行生命周期
- LESS嵌套中的Mixins和classes
less的嵌套规则对于有效组织你的css代码有较好的作用.其中使用mixin或者class都可以作为被嵌套的实体,但是二者还是有区别的: mixin必须由.name+(){}的pattern来定义,而 ...
- angularJS directive中的controller和link function辨析
在angularJS中,你有一系列的view,负责将数据渲染给用户:你有一些controller,负责管理$scope(view model)并且暴露相关behavior(通过$scope定义)给到v ...
- 基于bootstrap的单选(radio)或者多选(checkbox)的选择框组
完成的效果如下图所示: html代码如下: <!-- 两行组 --> <div class="box"> <ul class="list-g ...
- Javascript 删除tr 元素
Javascript 删除tr 元素 function delete1(obj){ var tr=obj.parentNode.parentNode; var tbody=tr.parentNod ...
- Day02——Python基本数据类型
一.运算符 1.算数运算符 2.比较运算符 3.复制运算符 4.逻辑运算符 5.成员运算符 二.基本数据类型 1.数字 整数(int) 在32位机器上,整数的位数为32位,取值范围为-2**31-2* ...
- Ubuntu下安装CUDA
cuda check: cuDNN 下载cuDNN后解压 更新软链接 更新链接库 symbol link 参考链接: http://docs.nvidia.com/cuda/cuda-installa ...
- zookeeper 的监控工具
zookeeper 的监控工具 公司很多产品会使用zookeeper,比如Meta消息中间件,在测试的过程中,我们经常需要查询zookeeper里面的信息来精确定位问题.目前项目中有开 ...
- 在ubuntu16.04上安装eclipse
在ubuntu16.04上安装eclipse 一.下载 首先我们需要安装jdk1.8及其以上,然后从官网:https://www.eclipse.org/downloads/上下载,需要注意 ...