Linux的文本编辑器之VIM

本文介绍了VIM编辑器的基本模式及其切换方式,并详细讲解了编辑模式、输入模式及末行模式的操作命令,包括文本编辑、查找替换等功能,适合初学者快速上手。

现讲下VIM
VIM有三个基本模式:1、编辑模式 2、输入模式 3、末行模式
编辑模式是进入VIM界面的模式,也算是默认模式
输入模式是进行文本编辑的模式
末行模式类似于功能栏
编辑模式可以算是过度模式,模式之间的切换是需要先转换到编辑模式之后再进行转换到其他模式
编辑模式转换到输入模式:i(insert,在光标处输入)
a:(append光标所在位置的后一位输入) 
o(在光标所在行的正下方添加一行)
I(在光标所在行的行首输入内容)
A(在光标所在行的行尾输入内容)
O(在光标所在行的正上方添加一行)
输入模式转换到编辑模式:esc键就可以了
编辑模式-->末行模式:直接输入冒号即可
末行模式的一些操作: 
set nu 显示行号
Linux的文本编辑器之VIM
set nonu 取消显示行号
Linux的文本编辑器之VIM 
1,2d 删除第1-2行
Linux的文本编辑器之VIM 
u 撤回操作
Linux的文本编辑器之VIM
Ctrl+r 取消撤回操作 (已经执行了a b c三步操作,当前在c步骤,u 返回到b步骤,Ctrl+r返回到c步骤)
Linux的文本编辑器之VIM
q 退出VIM 在没有任何改动的情况下
q! 强制退出 不保存修改
quit! 强制退出,不保存修改,这个力度更大
wq 保存并退出
x 保存并退出
w /file.path 另存为 但是界面还是停留在原文件,如果不保存修改,需要q!退出
末行模式转换到编辑模式 esc两次
VIM的基本操作
有些操作不能演示,需要自己练习
Shift+z 两个大写的Z就保存并退出VIM界面 直接输入即可
h光标向左移动 l(L)光标向右移动 j光标向下移动 k光标向上移动
还可以数字+移动方向 步跳为一个字符(20h 25l)
w 光标移动到下一个单词的词首
b 光标移动到当前或者前一个单词的词首
e 光标移动到当前或者后一个单词的词尾
还可以数字+移动方向 步跳为一个单词(20b 30e)
^ 光标移动到当前行的第一个非空白字符(tab不算) 直接输入
0 光标移动到当前行的行首
$ 光标移动到当前行的行尾(tab不算)
nG 光标移动到第n行
1G 光标移动到第一行
G 光标移动到最后一行
步跳为一句话 ( 或者 )
步跳为一段话 { 或者 }
Ctrl+f 向文件尾部翻一屏
Ctrl+d 向文件尾部翻半屏
Ctrl+b 向文件首部翻一屏
Ctrl+u 向文件首部翻半屏
x 删除光标所在位置的字符
nx:删除光标所在位置后的n个字符
xp:将光标所在位置的字符与光标后面的字符进行调换(先按x会删掉光标所在位置的字符,p会将删除掉的字符重新显示到光标后一位)
r"CHAR":将光标所在位置的字符更换为CHAR字符 输入rb 将光标所在位置的字符更换为b字符
d 可以与定位符一起使用 
d$:删除光标所在位置到该行行尾的所有字符
d^:删除光标前一位到该行行首的所有字符
dw:删除光标所在位置(光标位置上的字符需要删除)到下一个单词词首(词首不删除)的位置
de:删除光标所在位置的字符(光标位置上的字符需要删除)到当前单词的词尾或者删除光标所在位置的下一个单词
db:删除光标所在位置到当前单词的词首(光标位置上的字符不删除)或者删除光标所在位置的字符到前一个单词的词首(整个单词被删除)
nd{w\e\b} 可以指定删除n个单词
dd 删除光标所在的行
ndd 向下删除光标所在行的n行
p(小写,粘贴):缓冲区中的内容如果为整行,则粘贴到光标所在行的正下方,否则,粘贴到光标所在位置的后方
P(大写,粘贴): 缓冲区中的内容如果为整行,则粘贴到光标所在行的正上方,否则,粘贴到光标所在位置的前方
y:复制操作,用法与d的用法差不多 yy复制当前行,2yy复制当前行和下一行 仅仅只是复制,如果只输入一个y就是复制两行。
c:从编辑模式转换到输入模式 实现删除操作 与d相同,此外可以直接进入输入模式
v(小写):可以通过鼠标选择内容 步跳为1个字符
V(大写):可以通过鼠标选择内容 步跳为1行
v命令结合 d c y使用
.(点) 重复执行上一个编辑操作
Shift+$ 光标移动到行尾
Shift+^ 光标移动到行首
其他操作
1、vim +n file.name 打开文件并将光标移动到第n行的行首 vim +7 123.file
2、+/关键字:打开文件后,光标移动到第一个匹配关键字的行的行首 vim +/This 123.file
3、+ 不跟任何数字,打开文件后,光标处于末尾行的行首
4、将其他文件内容插入到当前文件中。
Linux的文本编辑器之VIM
上面是当前的文件内容 
Linux的文本编辑器之VIM
这个是命令 :15r /tmp/A/456
Linux的文本编辑器之VIM
在第15行的正下方插入456文件的内容。
5、地址定界
:start_pos [,end_pos]
开始位置 结束位置
如果只有个start_pos 就指定一行,如果有两个数字就是指范围end的数值>start的数值
end可以用+n 表示 例如 2,+7 第二行后的7行一共8行,第二行也要算
.表示当前行
$表示最后一行
%表示全文
/pattern/:表示从光标所在行之后(包含光标所在行)第一次匹配到关键字的行
/pattern1/,/pattern2/:表示从光标所在行之后(包含光标所在行)第一次匹配到pattern1为起始,到第一次匹配pattern2为结束。
地址界定仅仅是指明一个范围,至于在这个范围内干什么就需要看之后的命令了,比如说在这个范围内把某些关键字进行替换。
6、查找
/pattern 从光标所在处向文件尾部查找指定关键字
?pattern 从光标所在处向文件首部查找指定关键字
n:下一个,与命令方向相同
N:上一个,与命令方向相反
输入完关键字后需要敲一下回车 说明输入完毕
7、查找并替换
s/old pattern/new pattern
s表明命令作用是查找并替换,old pattern输入旧字符 new pattern输入新字符
还可以加修饰符:1、i 查找时忽略大小写
2、g 全局替换,一行中如果匹配了多次,则都进行替换(默认只替换每一行的第一次匹配的字符串)
Linux的文本编辑器之VIM
替换love为Love
Linux的文本编辑器之VIM
.是指定修改范围为当前行
s命令的作用是查找并替换
love是原文内容 Love是新的字符串,由于没有加修饰符,仅仅只替换了第一行中第一个匹配的字符串
Linux的文本编辑器之VIM
这个例子中g为修饰符将第一行中所有匹配的字符串全部都修改了。
指定行范围来修改指定内容 第一行与第二行范围内的字符修改br/>![](http://i2.51cto.com/images/blog/201712/16/4b1f015e8c5c4be081e0e79e7dd90c34.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
![](http://i2.51cto.com/images/blog/201712/16/8c4fd9ecbea8ec309188aa5501f89d43.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
练习:
在123.file中,在全局范围内,将以l开头的单词替换为L开头的单子
![](http://i2.51cto.com/images/blog/201712/16/ed78094d235da8d0d759204615c8bacf.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
:%s/\<l\([[:alpha:]]\+\)\>/L\1/g
:%s@\<l\([[:alpha:]]\+\)\>@L\1@g
注意在末行模式中单词定位符必须用\< \> 不能使用\b
在123.file中,在全局范围内,以l开头的单子后面都加上er字符
Linux的文本编辑器之VIM
:%s/\<(l[[:alpha:]]+)\>/\1er/g
将文件中第一行的#号去掉
Linux的文本编辑器之VIM
Linux的文本编辑器之VIM
:1s/^#// 
新字符什么都没输入就是空
用查找替换命令为文件中第18行的每个以空白字符开头的行首加上#号
Linux的文本编辑器之VIM
Linux的文本编辑器之VIM
:18s/(^[[:space:]]+[^[:space:]])/#\1/
命令中的非空字符主要是为了防止第18行是空白行

将文件中的enabled=0改为enabled=1 将gpgcheck=0改为gpgcheck=1
Linux的文本编辑器之VIM
Linux的文本编辑器之VIM
:%s/\<(enabled|gpgcheck)=0\>/\1=1/
VIM的多文件模式 VIM同时编辑两个文件 但是显示器同时只显示一个文件
使用末行模式 next 进行下一个文件切换,prev进行上一个文件切换 第一个文件first 最后一个文件last 也可以使用n/N进行文件切换 mn指定切换到后面第m个文件(输入的命令是1n,2n)
以上命令的前提是文件没有被修改过,一旦修改过就不能切换
退出所有文件并保存 wqall
仅退出所有文件 qall
末行模式输入bd 可以仅关闭当前文件(没有进行修改过)
VIM的多窗口模式
vim -o 123.file 456
Linux的文本编辑器之VIM
-o 水平分割窗口
-O 垂直分割窗口
Linux的文本编辑器之VIM
Ctrl+w 进行窗口间的切换 需要连续按两次w
Ctrl+w s 可以进行单文件多窗口编辑水平分割 v 垂直分割
先按Ctrl+w 放开后再按s键 
末行模式中:sp将全屏进行水平分屏,:vsp将全屏进行垂直分屏

定制VIM的工作特性
有些VIM的功能可能需要默认就开启 比如显示行号。 如果在末行模式中输入命令,那么仅仅是本文档有效。
可以通过修改/etc/vimrc(全局有效) 或者 ~/.vimrc(个人有效) 文件中的内容可以修改VIM的默认设置。
Linux的文本编辑器之VIM
1、行号
set nu 显示行号
set nonu 不显示行号 默认选项
2、括号匹配高亮显示
括号匹配高亮显示 这个仅适用与本地终端
set showmatch=set sm
set nosm
如果扩展的高亮颜色不习惯的话 需要边界vimrc文件,修改完文件后需要重新读入文件 DarkRed 为括号高亮的颜色。
http://www.runoob.com/try/color.php?color=Black 可用的颜色都在这里了
colorscheme desert
hi MatchParen ctermbg=DarkRed guibg=lightblue
3、语法高亮
Linux的文本编辑器之VIM
syntax on/off
4、搜索结果高亮
Linux的文本编辑器之VIM
/keywords 查找关键字
set hlsearch 高亮显示
set nohlsearch 不高亮显示
5、自动缩进 编程的时候有帮助
Linux的文本编辑器之VIM
set ai 自动与上一行的开头字母对其
se noai(默认配置) 不许上一行的行首对其
6、如何设置tab缩进4个字符
set tabstop(ts)=4
7、获取末行模式的命令帮助
help set 查看set怎么用
8、字符大小写
set ic (set ignorecase)忽略字符大小写
set noic(set noignorecase) 不忽略字符大小写


本文转自 yueyue207 51CTO博客,原文链接:http://blog.51cto.com/yueyue207/2051425


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值