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 里搜索关键字 在命令模式下敲斜杆( / )这时在状态栏(也就是屏幕左下脚)就出现了 "/" 然后输入你要查找的关键字敲回车就行了. 如果你要继续查找此关键字,敲字符 ...
随机推荐
- Linux文件系统简介----转载
原文地址:Linux文件系统 文件系统是linux的一个十分基础的知识,同时也是学习linux的必备知识. 本文将站在一个较高的视图来了解linux的文件系统,主要包括了linux磁盘分区和目录.挂载 ...
- oozie安装总结
偶然的机会,去面试的时候听面试官讲他们的调度系统是基于hue+oozie,以前一直没有接触过,今天趁有空,尝试一下oozie 1.环境说明 cat /etc/issue CentOS release ...
- C# mvc读取模板并修改上传到web
C# mvc读取模板并修改上传到web 后台: public FileResult GetXls() { FileStream fs = new FileStream(System.Web.HttpC ...
- dctcp-2.6.26-rev1.1.0.patch
dctcp-2.6.26-rev1.1.0.patch diff -Naur linux-/include/linux/sysctl.h linux--dctcp-rev1.1.0/include/l ...
- 【Leetcode】【Medium】Binary Tree Zigzag Level Order Traversal
Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to ...
- 关于微信公账号H5 API 调用的坑 BUG
页面A已经配置过,如果是单页面跳转,则页面B可以共享当前的SDK配置(至少菜单是这样的) 刷新页面,原先的菜单仍然会保持原样,只是调用SDK已经失效了,需要重新配置,重新配置后,菜单仍然会保持原样(如 ...
- CSS position属性 标签: css 2016-09-06 15:58 78人阅读 评论(0) 收藏
踩了position的坑,主要是因为对position属性理解不深. 以下是w3school中对position的解释: 可能的值 值 描述 absolute 生成绝对定位的元素,相对于 static ...
- pc端配置详细 2017级机械设计新生 史浩然
品牌名称:SAMSUNG/三星 证书状态:有效 申请人名称:苏州三星电子电脑有限公司 型号:940X3K-K01 操作系统:window8.1 产品名 ...
- laravel-5-doctrine-2 教程
Open up a Terminal again, cd into learning folder and run: composer require "laravel-doctrine/o ...
- 如何给SAP C4C的产品主数据division配置出新的下拉选项
如图:C4C产品主数据division字段默认的下拉菜单选项: 切换成调试模式,找到UI这个字段绑定的模型字段名称:/Root/MaterialDivision: 再找到这个UI模型字段绑定到的cor ...