Vi操作备忘

2024-09-04 16:18
文章标签 操作 vi 备忘

本文主要是介绍Vi操作备忘,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Vi操作备忘

      ViLinux系统里面的一个屏幕编辑程序,在终端中使用。Vi对文件的修改是在文件的副本上进行的,除非编辑顺利,并保存之后才会用修改的副本替代原始文件,否则,修改的内容会全部放弃,重新回到原始文件。

      Vi是一个优秀的代码工程师所必备的技能。故在此简述vi备忘。

1、可以在终端上,输入以下形式的命令行,进入vi编辑程序:

      vi filename

      vi有三种操作模式,分别为编辑模式、插入模式还有命令模式。

2、编辑模式

编辑模式的主要用途是,在被编辑的文件中移动光标的位置。

2.1

上移                           j     下移

h    左移                           l     右移

ctrl+f   在文件中前移一页

ctrl+b  在文件中后移一页

H   将光标移到屏幕上的起始行

将光标移到屏幕中间

L    将光标移到屏幕最后一行

HL命令前面还可以加数字,表示移进屏幕的行数。比如3H是指移到第二行

w 右移光标到下一行字的开头

e 右移光标到一个字的末尾

b 左移光标到前一个字的开头

0 (零)左移光标到本行的开始

^ 光标移到航中第一个非空字符

$ 右移光标到本行末尾

2.2、搜索字符串

/string 向前搜索给定的字符串string

string 向后搜索给定的字符串string

n 向前或向后搜索,找到字符串下次出现的位置(当到达文件末尾或开头时,他将绕开到文件的另一头,从那里开始搜索上)

2.3、替换和删除

rc c替换当前光标指示的字符

x 删除当前光标位置的字符

dw 删除光标右面的字

db 删除光标前面的字

dd 删除光标所在的行,并去掉空隙

在上面的任何命令前面加上数字,他们的功能就会成倍增强。

 

其他不能加数字的删除命令是:

d$ 从当前光标起删除字符直至行的结束

d0 从当前光标起删除字符直到行的开始

J 删除本行的回车字符(CR),并和下一行合并。

2.4、剪切和粘贴

P(小写) 将缓冲区的内容粘贴到当前光标的后面

P(大写) 将缓冲区的内容粘贴到当前光标的前面

yy 将当前行复制到剪切缓冲区

nyy n行复制到剪切缓冲区

 

2.5、撤销和重复

u 撤销前一条命令的结果

(点)重复最后一条修改正文的命令

 

3、插入模式

      3.1

a      //在当前光标位置的右边添加文本
i       //在当前光标位置的左边添加文本

A     //在当前行的末尾位置添加文本

I      //在当前行的开始处添加文本(非空字符的行首)

O     //在当前行的上面新建一行

o     //在当前行的下面新建一行

R    //替换(覆盖)当前光标位置及后面的若干文本

J    //合并光标所在行及下一行为一行(依然在命令模式)

 

      3.2正文替换

ns 用新正文替换光标后面的n个字符

ncw 替换光标后面的n个字

ncb 替换光标前面的n个字

ncd 替换下面的n

 

c$ 用新正文替换从光标开始到本行末尾的所有字符

c0 替换从光标开始到本行开头的所有字符

 

4、命令模式

      所有命令皆以冒号(:)开头

      4.1 退出命令
:q          //退出编辑器,如果文件已修改请使用下面的命令

:q!        //退出编辑器,且不保存

:wq         //退出编辑器,且保存文件

      4.2 文件的使用

:w       //保存文件
:w vpser.net //保存至vpser.net文件

:r file    //file文件的内容读入,放在当前光标行的后面

:e file   //编辑新文件file代替旧的内容

:f file    //将当前正文的名称改为file

:f    //打印当前正文的名称和状态

:a,bw  file //a行到b行之间的内容写到file文件之中

 

      4.3 行号

      正在进行编辑的正文的所有行都有一个行号与其对应。

:n   将光标移到第n

可以使用数值,表示绝对行号

句点表示当前光标所在行的行号

美元符号表示最后一行的行号

简单数值表达式,作为行号

比如:

:.,.+4w myfile  //从当前行开始将5行的内容写入到myfile文件之中

 

      4.4字符串搜索

:/string/     将光标前移到下一个包含string字符串的行

:?string?    将光标后移到下一个包含string字符串的行

:/str1/,/str2/w  myfile           将从包含str1的行到包含str2的行的正文写入到myfile文件里面

 

      包含特殊字符的搜索字符串,叫做规则表达式,正则表达式。可参考http://cyw.iteye.com/blog/2243996

:/^str/       找出以str字符串开头的行

^         放在字符串开头,匹配行首的字

$         放在字符串结尾,匹配行尾的字

\<       匹配一个字的开头

\>       匹配一个字的结尾

.     (句点)匹配任何单一字符

[str]           匹配str中的各个单一字符

[a-b]          匹配ab之间的任意字符

*              匹配前一个字符的0次或多次出现

\               不管后面字符的特殊含义

 

      4.5正文替换

:s/str1/str2/          str2替换行中首次出现的str1

:s/str1/str2/g        str2替换行中每一个str1

:1,$s/str1/str2/g    str2替换整个文件中的str1

:g/str1/s//str2/g    str2替换整个文件中的str1

g放在命令的末尾表示在当前光标行中对搜索字符串的每一次出现重复使用本命令;g放在命令的开头规定命令对文件中所有包含搜索字符串的行进行替换操作。

 

      4.6删除正文

:d        删除当前光标行

:.,$d

 

5、设置vi的内部变量

:set option

autoindent          自动缩进

ignorecase     不区分规则表达式的大小写,noignorecase关闭本选项

number          行号

ruler               标尺。屏幕底行显示光标行的行号以及在行中的位置。noruler关闭本选项。

tabstop          设置tab跳过的空格数。

 

6shell切换

在编辑环境中运行Linux命令。

:! Command          执行command命令后回到编辑界面



 

 

另外可以参考文章:http://www.vpser.net/manage/vi.html

这篇关于Vi操作备忘的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1136415

相关文章

动手学深度学习【数据操作+数据预处理】

import osos.makedirs(os.path.join('.', 'data'), exist_ok=True)data_file = os.path.join('.', 'data', 'house_tiny.csv')with open(data_file, 'w') as f:f.write('NumRooms,Alley,Price\n') # 列名f.write('NA

线程的四种操作

所属专栏:Java学习        1. 线程的开启 start和run的区别: run:描述了线程要执行的任务,也可以称为线程的入口 start:调用系统函数,真正的在系统内核中创建线程(创建PCB,加入到链表中),此处的start会根据不同的系统,分别调用不同的api,创建好之后的线程,再单独去执行run(所以说,start的本质是调用系统api,系统的api

Java IO 操作——个人理解

之前一直Java的IO操作一知半解。今天看到一个便文章觉得很有道理( 原文章),记录一下。 首先,理解Java的IO操作到底操作的什么内容,过程又是怎么样子。          数据来源的操作: 来源有文件,网络数据。使用File类和Sockets等。这里操作的是数据本身,1,0结构。    File file = new File("path");   字

MySQL——表操作

目录 一、创建表 二、查看表 2.1 查看表中某成员的数据 2.2 查看整个表中的表成员 2.3 查看创建表时的句柄 三、修改表 alter 3.1 重命名 rename 3.2 新增一列 add 3.3 更改列属性 modify 3.4 更改列名称 change 3.5 删除某列 上一篇博客介绍了库的操作,接下来来看一下表的相关操作。 一、创建表 create

封装MySQL操作时Where条件语句的组织

在对数据库进行封装的过程中,条件语句应该是相对难以处理的,毕竟条件语句太过于多样性。 条件语句大致分为以下几种: 1、单一条件,比如:where id = 1; 2、多个条件,相互间关系统一。比如:where id > 10 and age > 20 and score < 60; 3、多个条件,相互间关系不统一。比如:where (id > 10 OR age > 20) AND sco

PHP7扩展开发之流操作

前言 啥是流操作?简单来讲就是对一些文件,网络的IO操作。PHP已经把这些IO操作,封装成流操作。这节,我们将使用PHP扩展实现一个目录遍历的功能。PHP示例代码如下: <?phpfunction list_dir($dir) {if (is_dir($dir) === false) {return;} $dh = opendir($dir);if ($dh == false) {ret

浙大数据结构:树的定义与操作

四种遍历 #include<iostream>#include<queue>using namespace std;typedef struct treenode *BinTree;typedef BinTree position;typedef int ElementType;struct treenode{ElementType data;BinTree left;BinTre

浙大数据结构:04-树7 二叉搜索树的操作集

这道题答案都在PPT上,所以先学会再写的话并不难。 1、BinTree Insert( BinTree BST, ElementType X ) 递归实现,小就进左子树,大就进右子树。 为空就新建结点插入。 BinTree Insert( BinTree BST, ElementType X ){if(!BST){BST=(BinTree)malloc(sizeof(struct TNo

hibernate修改数据库已有的对象【简化操作】

陈科肇 直接上代码: /*** 更新新的数据并并未修改旧的数据* @param oldEntity 数据库存在的实体* @param newEntity 更改后的实体* @throws IllegalAccessException * @throws IllegalArgumentException */public void updateNew(T oldEntity,T newEntity

mysql中导入txt文件数据的操作指令

1 表tt的格式:    CREATE TABLE `tt` (   `ind` int NOT NULL auto_increment,   `name` char(100) default NULL,   PRIMARY KEY  (`ind`)  )   2 文件d.txt的内容示例:  1,a  2,b  3,c