四、vim的高级用法配置
目录
1.vim的三种模式
vim file #直接编辑文件内容
vim模式
模式 | 功能 |
---|---|
命令模式(浏览模式) | 1. 该模式下只能对文件内容浏览 |
2.对vim的工作方式进行设定 | |
3.不能修改文件内容 | |
插入模式 | 对文件内容进行修改的模型 |
退出模式 | 结束vim程序用到的命令 |
vimtutor | vim手册 |
注:
1)命令模式中按i进入插入模式;
2)插入模式完成编辑后按ESC进入浏览模式;
3)输入:wq
退出保存,:q!
强制退出;
4)进入手册按vim help
;
2.vim工作的基本配置
命令模式下如何更改vim的工作方式
方法 | 临时设定 |
---|---|
:set | 设定 |
:set nu | 显示行号 |
:set noun | 取消行号显示 |
:set mouse==a | 鼠标可用 |
:set cursorline | 显示光标所在行的行线 |
##执行前
134 134 touch file file
135 135 touch file file1
136 136 mkdir filedir
137 137 mkdir filedir1
138 138 history > file
:set noun ##取消行号显示
##执行后
134 touch file file
135 touch file file1
136 mkdir filedir
137 mkdir filedir1
138 history > file
方法 | 永久设定 |
---|---|
vim /etc/vimrc | vim配置文件 (for all user) |
vim ~/.vimrc | for only user |
[jiangjiang@localhost Desktop]$ vim /etc/vimrc
[jiangjiang@localhost Desktop]$ head /etc/vimrc
if v:lang =~ "utf8$" || v:lang =~ "UTF-8$"
set fileencodings=ucs-bom,utf-8,latin1
endif
set nu
set nocompatible " Use Vim defaults (much better!)
set bs=indent,eol,start " allow backspacing over everything in insert mode
"set ai " always set autoindenting on
"set backup " keep a backup file
set viminfo='20,\"50 " read/write a .viminfo file, don't store more
3.搜索
命令 | 功能 |
---|---|
/关键字 | 高亮显示关键字 |
noh | 取消高亮显示 |
n | 向下匹配关键字 |
N | 向上匹配关键字 |
/touch #结果
4.vim的字符管理
1)复制
命令 | 功能 |
---|---|
y | 复制快捷键 |
yl | 复制一个字母 |
y3l | 复制三个字母 |
yw | 复制一个单词 |
y3w | 复制三个单词 |
yy | 复制一行 |
y3y | 复制三行 |
## y3y
134 134 touch file file
135 135 touch file file1
136 136 mkdir filedir
137 137 mkdir filedir1
138 138 history > file
139 15 man -k passwd
140 15 man -k passwd
~
== 3 lines yanked ==
##按p粘贴后
134 134 touch file file
135 135 touch file file1
136 136 mkdir filedir
137 137 mkdir filedir1
138 138 history > file
139 15 man -k passwd
140 15 man -k passwd
141 122 vim /etc/vimrc
142 123 su -
143 124 vim ~/.vimrc
2)删除
命令 | 功能 |
---|---|
d | 删除快捷键 |
dl | 删除一个字母 |
d3l | 删除三个字母 |
dw | 删除一个单词 |
d3w | 删除三个单词 |
dd | 删除一行 |
d3d | 删除三行 |
127 130 head /etc/vimrc
##d3w
127 /etc/vimrc
##d3l
127 c/vimrc
3)剪切
命令 | 功能 |
---|---|
c | 剪切 |
cl | 剪切一个字母 |
c3l | 剪切三个字母 |
cw | 剪切一个单词 |
c3w | 剪切三个单词 |
cc | 剪切一行 |
c3c | 剪切三行 |
注意:
剪切操作完毕后会进入到插入模式,如果要粘贴需要按ESC退出插入模式在按p粘贴
4)其他
1)粘贴
p #在命令模式下p表示粘贴
2)恢复
u #在命令模式下u表示恢复
3)撤销
Ctrl+R
#表示撤销操作
5.vim可视化模式
Ctrl+V
#进入可视化模式
批量添加字符
- Ctrl+V 选中插入字符;
- 按大写I进入插入模式;
- 插入要写入的字符;
- ESC退出插入模式;
- 批量添加完成。
按
y
复制后,按p
粘贴结果:
6.批量修改字符
:%s/原字符/替换字符/g
# %表示全文的行,g表示全文的列
:65,70s/etc/:)/g
# 把65到70行所有列中的etc替换为:)
结果如下:
7.vim的分屏功能
同步分屏
命令 | 功能 |
---|---|
Ctrl+W S | 上下分屏 |
Ctrl+W v | 左右分屏 |
Ctrl+W Up/Down/Left/Right | 光标移动 |
Ctrl+W c | 取消分屏 |
:sp #不同步分屏
命令 | 功能 |
---|---|
vim -o file1 file2 | 上下分屏 |
vim -p file3 file4 | 左右分屏 |
8.快速定位光标
命令 | 功能 |
---|---|
gg | 光标移动到文件第一行行首 |
G | 光标移动到最后一行 |
:数字 | 光标移动到指定行 |
9.vim插入模式进入方式
命令 | 功能 |
---|---|
i | 光标所在位置插入 |
I | 光标所在行行首插入 |
A | 光标所在行的行尾插入 |
a | 光标所在字符的下一个字符插入 |
o | 光标在行的下一行插入 |
O | 光标所在行的上一行插入 |
s | 删除光标所在字符插入 |
S | 删除光标所在行插入 |
10.vim退出模式
命令 | 功能 |
---|---|
:wq | 保存退出 |
:wq! | 强制保存退出只有文件是自己的或者root用户可用 |
:q | 退出 |
:q! | 强制退出不保存 |
Test
查找一个字符串:
- 在文件/usr/share/xml/iso-codes/iso_639_3.xml中查找到所有包含字符ng 的行
- 将找出的行按照先后顺序复制到/root/list文件中
- /root/list文件中无意义的空格请去除掉
- 其中的所有行的内容必须时源文件中原始的标准副本
解1:在文件/usr/share/xml/iso-codes/iso_639_3.xml中查找到所有包含字符ng 的行
[jiangjiang@localhost Desktop]$ grep ng /usr/share/xml/iso-codes/iso_639_3.xml
<?xml version="1.0" encoding="UTF-8" ?>
This file gives a list of all languages in the ISO 639-3
License along with this file; if not, write to the Free Software
reference_name="Solong"
name="Solong" />
reference_name="Abai Sungai"
name="Abai Sungai" />
reference_name="Lampung Nyo"
name="Lampung Nyo" />
reference_name="Achang"
name="Achang" />
reference_name="Adangme"
name="Adangme" />
reference_name="Adang"
name="Adang" />
reference_name="Adangbe"
name="Adangbe" />
......
解2:将找出的行按照先后顺序复制到/root/list文件中
[root@localhost ~]# grep ng /usr/share/xml/iso-codes/iso_639_3.xml >/root/list
[root@localhost ~]# cat /root/list
<?xml version="1.0" encoding="UTF-8" ?>
This file gives a list of all languages in the ISO 639-3
License along with this file; if not, write to the Free Software
reference_name="Solong"
name="Solong" />
reference_name="Abai Sungai"
name="Abai Sungai" />
reference_name="Lampung Nyo"
name="Lampung Nyo" />
reference_name="Achang"
name="Achang" />
reference_name="Adangme"
name="Adangme" />
reference_name="Adang"
name="Adang" />
reference_name="Adangbe"
name="Adangbe" />
解3: /root/list文件中无意义的空格请去除掉
方法1:
:%s/^I//g
方法2:
:%s/^\ *//g # (^\ *)
表示开头所有的空格 ^表示开头\表示转译空格 *表示所有