vim操作浅解

vim是一种比vi更加强大的模式化的全屏文本编辑器。vim在工作过程中有三种模式:编辑模式、插入模式、末行模式。

编辑模式(默认):又称命令模式,其工作内容包括移动光标、剪切、粘贴、删除等
输入模式:亦可称为插入模式,主要是在文件中修改文本内容
末行模式:亦称扩展命令模式,主要是执行vim内置命令的

vim三种模式之间的切换:如下图 

(1)编辑模式 --> 输入模式

i: 在光标所在处输入
I:在当前光标所在行的行首 输入
a: 在光标所在处后面输入
A:在当前光标所在行的行尾 输入
o: 在当前光标所在行的下方打开一个新行
O:在当前光标所在行的上方打开一个新行

(2)输入模式 ----> 编辑模式

按ESC键

(3)编辑模式 ----> 末行模式

:(冒号)

(4)末行模式 ----> 编辑模式

按ESC键

1、vim的基本操作

(1)vim语法即其常用选

vim [options] [file ..]
option:
-b:以二进制方式打开文件
-d:后接多个文件表示打开并比较多个文件
-m:以只读方式打开文件
-e:直接进入末行模式

(2)打开文件

+#:表示打开文件后,直接让光标处于第#行的行首
+/PATTERN:打开文件后,直接让光标处于第一个被PATTERN 匹配到的行的行首
如:vim ‘+/UUID‘ /etc/fstab
+:打开文件后,光标处于文件的最后一行

(3)退出文件

1)末行模式中退出

:q  表示退出
:q!  表示强制退出
:wq  表示保存退出
:x  表示保存退出
:w /PATH/TO/SOMEFILE 不退出,而是将文件保存至指定文件

2)编辑模式退出

ZZ:表示保存退出
ZQ:表示不保存退出

(4)光标移动(编辑模式中)

1)字符间移动

h:一次向左移动一个字符
j:一次向下移动一个字符
k:一次向上移动一个字符
l:(小写L)一次向右移动一个字符
上下左右箭头键亦可实现上述操作
还可以用#+{h,j,k,l}来表示移动几个字符,如“3h”表示向左移动3个字符

2)单词间移动

w:移动到下一个单词的词首
e:移动到当前或下一个单词的词尾
b:移动到当前或下一个单词的词首
#+{w,e,b}表示动到第#个字符的词首(词尾)

3)当前页面内的移动

H:移动到当前页的第一行行首
M:移动到当前页面的中间行的行首
L:移动到当前页面的最后一行的行尾

4)行内移动

^:跳至当前行首的第一个非空白字符
0:跳至当前行的行首(绝对行首)
$:跳至当前行的行尾

5)行间移动

G:跳至文件的最后一行的行首
1G(gg):跳至文件的第一行行首
#G:跳至指定的定#行行首

6)句间移动(以空行来划分)

):向下移动一句
(:向上移动一句

7)段落间移动(以空行来划分 ####)

{:向下移动一段
}:向上移动一段

(5)翻屏操作

Ctrl+f:  向文件尾部翻一屏
Ctrl+b:  向文件首部翻一屏
Ctrl+d:  向文件尾部翻半屏
Ctrl+u: 向文件首部翻半屏

2、vim的编辑模式的命令

(1)字符删除

x: 删除光标处的字符
#x: 删除光标处起始的#个字符
d:删除(剪切)命令,需要结合光标移动字符使用(w/b/e/$/0/^等)如:“d$”表示删除光标以后的内容,“3dw”表示删除光标后的3个单词
dd:删除光标所在处的行
D:从当前光标位置一直删除到行尾,等同于d$
xp: 交换光标所在处的字符及其后面字符的位置
~: 转换大小写

(2)字符替换

r:替换光标所在处的字符,一次只能替换单个字符
R:切换成REPLACE模式,可以逐个字符替换

(3)复制

y:复制命令,可以结合光标移动字符使用(w/b/e/$/0/^等)如:“y0”表示复制光标所在处到行首的内容,“0y$”表示整行。
yy:复制整行
#yy:一次复制#行

(4)粘贴(配合d或y命令使用)

p:(小写)如果复制为整行,则将复制的内容粘贴到当前光标所在行的下方;如果复制的是行的部分内容,则将复制的内容粘贴至当前光标所在处的后面
P:(大写)如果复制为整行,则将复制的内容粘贴到当前光标所在行的上方;如果复制的是行的部分内容,则将复制的内容粘贴至当前光标所在处的前面

(5)修改,即先删除在变为输入模式

c:修改命令,可以结合光标移动字符使用(w/b/e/$/0/^等)
cc:删除当前行并输入新内容
C:删除当前光标到行尾的内容,并切换成插入模式

(6)撤销与重复操作

u:撤销最近的修改,一次只撤销一个操作
#u:一次撤销#个操作
Ctrl+r:撤销上一次的撤销操作
.:重复前一个操作
n.:重复前n个操作

(7)其他编辑操作

1)可视化模式

v:按字符选定
V:按行选定
Ctrl+v:按块选定

2)一次输入n次同样的内容,示例说明

100iwang [ESC]:先输入100,在输入i,然后输入wang,最后按ESC键,即输入100个wang字符

3、vim的末行模式操作(记得“:”)

(1)地址定界

1)#: 具体第#行,如2 表示第2 行;
2)#,#: 从左侧#表示行起始,到右侧# 表示行结尾,如3,8表示第3到第8行
3)#,+#: 左侧#示的行起始,加上右侧# 表示的行数,如2,+3 表示2到5行
4). : 当前行
5)$: 最后一行
6)% :全文, 相当于1,$
7)/pattern1/,/pattern2/ : 第一次被pattern1模式匹配到的行开始,一直到第一次被pattern2匹配到的行结束
8)w /PATH/TO/SOMEFILE : 表示将范围内的内容另存到指定文件中
9)r /PATH/FROM/SOMEWHERE : 表示将外部指定文件的内容调入到指定的位置中

(2)查找

/PATTERN:从当前光标所在处向文件尾部查找
?PATTERN:从当前光标所在处向文件首部查找
N:上一个,与命令反方向
n:下一个,与命令同方向

(3)查找与替换

s///:查找并替换,分隔符可以自定如:[email protected]@@,s###。
格式:s/ 要查找的内容/ 替换为的内容/ 修饰符
    要查找的内容:可使用模式
    替换为的内容:不能使用模式,但可以使用\1, \2, ...等后向引用符号;还可以使用“&” 引用前面查找时查找到的内容
    修饰符:
    i : 忽略大小写
    g : 全局替换;默认情况下,每一行只替换第一个匹配到的内容
    gc : 全局替换,每次替换前询问

4、vim的寄存器(在编辑模式下)

1)有26个命名寄存器和1个无命名寄存器,常存放不同的剪贴版内容,可以不同会话间共享
2)26个命名寄存器由26个英文字母一一对应,用a ,b,…,z 表示, 用“字母 表示寄存器,放在数字和命令之间,如“3"ayy”  表示复制3 行到a 寄存器中,“"ap”表示将a寄存器的3行内容粘贴到光标处的下一行
3)未指定名字,将使用无命名寄存器,直接使用3yy即可复制
4)有10个数字寄存器用0,1,…,9表示,0存放最近复制的内容,1存放最近删除的内容。当新的文变更和删除时,1 转存到2 ,2 转存到3 ,以此类推。数字寄存器不能在不同会话间共享。

5、打开多个文件

vim FILE1 FILE2 FILE3 ...
各个文件间的切换:(在编辑模式下)
:next  跳至下一个文件
:prev  跳至前一个文件
:first  跳至第一个文件
:last  跳至最后一个文件
:wall  保存所有文件但不退出
:qall  退出所有文件
:wqall   保存并退出所有文件

6、多窗口模式

(1)多文件分割

vim -o |-O FILE1 FILE2 FILE3 ...
-o:水平分割
-O:垂直分割
Ctrl+w切换窗口

(2)单文件分割

Ctrl+w,s: split,  水平分割()
Ctrl+w,v: vertical,  垂直分割
ctrl+w,q :取消相邻窗口
ctrl+w,o : 取消全部窗口
:wqall  退出

7、定制vim的工作特性

(1)自动缩进

启用:set ai
禁用:set noai

(2)高亮搜索

启用:set hlsearch
禁用:set nohlsearch

(3)语法高亮

启用:syntax on
禁用:syntax off

(4)忽略字符大小写

忽略:set ic
不忽略:set noic

(5)设置行号

显示:set nu
不显示:set nonu

(6)括号成对匹配

启用:set sm
禁用:set nosm

(7)配置文件(使定制的特性永久生效)

全局设置:/etc/vimrc
个人设置:~/.vimrc

(8)文件格式

启用unix格式:fileformat=unix
启用dos格式:fileformat=dos
### (9)设置文本宽度 ###
:set textwidth=65
:set wrapmargin=15

8、习题

(1)如何设置tab 缩进为4 个字符

在末行模式输入:set ts=4即可,如果要永久生效可以写入配置文件

(2)复制/etc/rc.d/init.d/functions 文件至/tmp 目录;替换/tmp/functions 文件中的/etc/sysconfig/init 为/var/log;

在末行模式输入:%[email protected]/etc/sysconfig/[email protected]/var/[email protected]

(3)删除/tmp/functions 文件中所有以# 开头,且#后面至少有一个空白字符的行的行首的# 号;

在末行模式输入:%[email protected]^#[[:space:]]\[email protected]@g

(4)将/etc/yum.repos.d/CentOS-Base.repo文件中所有的enable=0替换enable=1,所有gpgcheck=0替换为gpgcheck=1;

在末行模式输入:%[email protected]\(enabled\|gpgcheck\)[email protected]\[email protected]
时间: 2024-10-05 08:53:05

vim操作浅解的相关文章

linux之vim编辑器详解

字处理器:像word,wps,除了本文本身以外,还有修饰方面的设置. 文本编辑器:编辑纯ASCII文档. nano,sed  入门简单,功能简陋. 强大的vi编辑器 (Visual Interface) 现在是Vim :VI  inproved 它是全屏编辑器,模式化编辑器. vim模式: 编辑模式(命令模式) 输入模式 末行模式 默认处于编辑模式. 模式转化: 编辑模式--->输入模式: i :在当前光标所在字符的前面,转为输入模式. a:在当前光标所在字符的后面,转为输入模式. o:在当前光

byte和int的浅解

1.byte范围为什么是(-128~127)? --byte是8位 --这里定义2种8位展现形式:1,符号形式(第一眼看符号位,判断正负,然后计算剩下7位的数值).2,存储形式(内存中都是补码存储) --想要知道一个数在内存中如何存储?真值 >> 符号形式 >> 补码 >> 存储形式 --示例1: +8(真值) +8(符号形式):0000 1000,//真值"+8",因为是"+",所以将第一位定义为0,因为值是"8&qu

vim 命令详解

vim 命令详解 vi: Visual Interface 可视化接口vim: VI iMproved VI增强版 全屏编辑器,模式化编辑器 vim模式: 编辑模式(命令模式) 输入模式 末行模式 模式转换: 编辑-->输入: i: 在当前光标所在字符的前面,转为输入模式: a: 在当前光标所在字符的后面,转为输入模式: o: 在当前光标所在行的下方,新建一行,并转为输入模式: I:在当前光标所在行的行首,转换为输入模式 A:在当前光标所在行的行尾,转换为输入模式 O:在当前光标所在行的上方,新

浅解多线程(二)之和尚们的那些事儿

浅解多线程(一)之线程入门起步 本文链接 确定多线程的结束时间,thread的IsAlive属性 线程优先级,thread的ThreadPriority属性 线程通信之Monitor类 线程排队之Join 多线程互斥锁Mutex 信号量semaphore 确定多线程的结束时间,thread的IsAlive属性 在多个线程运行的背景下,了解线程什么时候结束,什么时候停止是很有必要的. 案例:老和尚念经计时,2本经书,2个和尚念,一人一本,不能撕破,最短时间念完,问老和尚们念完经书最短需要多长时间.

软考之路(1)——浅解网络基础知识

对网络这一块的基础知识理解如下,以图文并茂的形式展出,便于分析和理解.解析与图如下: 物理层: 功能: 提供为建立.维护和拆除物理链路所需的机械.电气.功能和规程的特性: 提供有关在传输介质上传输非结构的位流及物理链路故障检测指示: 为数据链路层提供一个物理连接,以及他们的机械.电气.功能和过程性.如规定使用电缆和接头的类型,传送信号的电压.在这一层,数据还没有被组织,仅作为原始的位流或电气电压处理,单位是位. 物理链路: 这里多次出现物理链路,简单解释物理链路:一条无源的点到点的物理线路段,中

vim使用详解

vim简介vi: Visual Interface,文本编辑器文本:ASCII, Unicode 打开文件 vim [OPTION]... FILE...+# 打开文件后,让光标处于第#行的行首,+默认行尾+/PATTERN 让光标处于第一个被PATTERN匹配到的行的行首–b file 二进制方式打开文件–d file1 file2- 比较多个文件-m file 只读打开文件vim -e file 或 ex file 直接进入ex模式如果该文件存在,文件被打开并显示内容如果该文件不存在,当编辑

Windows DIB文件操作详解-4.使用DIB Section

前面讲了为了提高DIB的显示性能和效率,我们将DIB转换成DDB,但是这又遇到一个问题,如果我想操作DIB的数据的话,显然是不能使用DDB:一是因为DIB转DDB时发生了颜色转换,再就是DDB无法直接提取指定像素点的数据.那么我们怎么办呢,Windows使用一种折中的方式来达到这一目标(既提高了显示效率和性能,又可以直接操作像素点). 1.DIB Section存储和显示 Windows使用DIB块(DIB Section)来存储DIB数据,其内存结构示意图如下 其实,和我们自己读入DIB数据到

Linq实战 之 DataSet操作详解

Linq实战 之 DataSet操作详解  一:linq to Ado.Net 1. linq为什么要扩展ado.net,原因在于给既有代码增加福利.FCL中在ado.net上扩展了一些方法. 简单一点的说: 就是在DatTable 和 DataRow 上面做了一些扩展. 二:扩展方法一览 1. AsEnumerable 2. Field 三:扩展类一览 DataTableExtensions 扩展 => public static EnumerableRowCollection<DataRo

phpEXCEL操作全解

phpExcel中文帮助手册,列举了各种属性,以及常用的操作方法,难得是每一个都用实例加以说明,希望对大家有所帮助. phpExcel中文帮助手册,不可多得的好文章,供大家学习参考. 1.设置excel的属性: 创建人 $objPHPExcel->getProperties()->setCreator("Maarten Balliauw"); 最后修改人 $objPHPExcel->getProperties()->setLastModifiedBy("