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 里搜索关键字 在命令模式下敲斜杆( / )这时在状态栏(也就是屏幕左下脚)就出现了 "/" 然后输入你要查找的关键字敲回车就行了. 如果你要继续查找此关键字,敲字符 ...
随机推荐
- Windows操作系统下给文件夹右键命令菜单添加启动命令行的选项
在命令行中或按下[WIN]+[R]键启动运行对话框的情况下,输入regedit命令启动注册表编辑器,在HKEY_CLASSES_ROOT\Folder\shell下增加一个“CMD”(此处名字可以随便 ...
- EM(期望最大化)算法初步认识
不多说,直接上干货! 机器学习十大算法之一:EM算法(即期望最大化算法).能评得上十大之一,让人听起来觉得挺NB的.什么是NB啊,我们一般说某个人很NB,是因为他能解决一些别人解决不了的问题.神为什么 ...
- 面试准备之一Python
基本数据类型 函数 模块与包 面向对象 网络编程 垃圾回收机制 G 并发编程
- 微软智能云Azure – 中国首家官方支持CoreOS的公有云
北京2016年6月24日, 在由中国开源软件推进联盟(COPU)主办, 开源社协办,微软赞助的“第十一届开源中国开源世界高峰论坛”上,微软亚太研发集团云计算高级总监梁戈碧女士正式对外宣布一个令人振奋的 ...
- svn merge error must be ancestrally related to,trunk merge branch报错
trunk merge branch的时候报错 xxx must be ancestrally related to xxx,这个报错的意思是两者不关联,所以需要去建立关联. [回顾背景] ...
- linux(centos)设置tomcat开机启动
方法一: linux 下tomcat开机自启动修改Tomcat/bin/startup.sh 为: export JAVA_HOME=/usr/java/j2sdk1.4.2_08 export CL ...
- 【Leetcode】【Medium】Generate Parentheses
Given n pairs of parentheses, write a function to generate all combinations of well-formed parenthes ...
- RabbitMq ack 与 nack
1.ack 移除 2.nack 移除再次发送队列
- Http status(二)
http含义: http 200:-文件被正常的访问 http 302:临时重定向 HTTP错误列表 HTTP 400 - 请求无效 HTTP 401.1 - 未授权:登录失败 HTTP 401.2 ...
- 杨氏矩阵C++实现
何为杨氏矩阵?这个网上的介绍很多,下面给出杨氏矩阵搜索算法: #include <iostream> using namespace std; // 杨氏矩阵查找算法 ], int N, ...