vim一个强大的文本编译器
vim 强大到只有你想不到的功能没有他没有的功能,这里整理了一些我平时上课、百度和实践中的一些笔记,希望能给大家带来帮助。
以下命令都可以到vimtutor练习(同时也可以查帮助)
#vim[OPTION]… FILE…
+# // 打开文件后,让光标处于第#行的行首,+默认行尾
+/PATTERN //让光标处于第一个被PATTERN匹配到的行的行首
-b file //二进制方式打开文件
-d file1 file2... //比较多个文件
-m file //只读打开文件
vim -e file或ex file //直接进入ex模式
如果该文件存在,文件被打开并显示内容 如果该文件不存在,当编辑后第一次存盘时创建它
举例:
直接跳到文件的第12行
[root@sentos7~]#vim +12 /etc/passwd
同时打开两个文件
[root@sentos7data]#vim -d test test1
2 files to edit
this is test | this is test1
击键行为是依赖于vim的的“模式”
三种主要模式∶
1.命令(Normal)模式︰默认模式,移动光标,剪切/粘贴文本
2.插入(Insert)或编辑模式∶修改文本
3.扩展命令(extended command )模式︰保存,退出等
Esc键退出当前模式
Esc键Esc键总是返回到命令模式
模式转换
模式转换
命令模式- - > 插入模式
i insert,在光标所在处输入
I 在当前光标所在行的行首输入
a append,在光标所在处后面输入
A 在当前光标所在行的行尾输入
o 在当前光标所在行的下方打开一个新行
O 在当前光标所在行的上方打开一个新行
关闭文件
扩展命令模式:
:q 退出
:q! 强制退出,丢弃做出的修改
:wq 保存退出T
:X 保存退出
命令模式:
ZZ 保存退出
ZQ 不保存退出
扩展命令模式
按 : 进入Ex模式(创建一个命令提示符: 处于底部的屏幕左侧)
常见命令
:w 写(存)磁盘文件
:wq 写入并退出
:x 写入并退出
:q 退出
:q ! 不存盘退出,即使更改都将丢失
:r filename 读文件内容到当前文件中
:w filename 将当前文件内容写入另一个文件
:! command 执行命令(:!后面加想要执行的命令)
:r!command 读入命令的输出
举例与命令解析
让命令显示的文本写入编辑模式中
命令模式光标跳转
字符间跳转∶
h: 左
l: 右
j: 下
k: 上
#COMMAND∶跳转由#指定的个数的字符
例如:同时按3和k 就会往下跳转3个字母
单词间跳转∶
w : 下一个单词的词首
e : 当前或下一单词的词尾
b : 当前或前一个单词的词首
#COMMAND:由#指定一次跳转的单词数
同理:同时按3和e 就会直接到第三个或下三个单词的词尾
当前页跳转∶
H: 页首
M: 页中间行
L: 页底
zt: 将光标所在当前行移到屏幕顶端
zz∶ 将光标所在当前行移到屏幕中间
zb: 将光标所在当前行移到屏幕底端
命令模式光标跳转行
首行尾跳转∶
^ 跳转至行首的第一个非空白字符
0 跳转至行首
$ 跳转至行尾
行间移动:
#G 或者扩展命令模式下:# 跳转至由第#行
G 最后一行
1G, gg 第一行
句间移动:
) 下一句
( 上一句
段落间移动∶
} 下一段
{
上一段
命令模式翻屏操作
Ctrl+f 向文件尾部翻一屏
Ctrl+ b 向文件首部翻一屏
Ctrl+d 向文件尾部翻半屏
Ctrl+u 向文件首部翻半屏
命令模式操作
字符编辑∶
x 删除光标处的字符
#x 删除光标处起始的#个字符
xp 交换光标所在处的字符及其后面字符的位置
~ 转换大小写
J 删除当前行后的换行符
xp举例:比如一个错误单词
光标在s上此时同时按x和p e字母就会和s字母换顺序
替换命令(r, replace)
r 替换光标所在处的字符
R 切换成REPLACE模式
命令模式操作删除命令∶
d 删除命令,可结合光标跳转字符,实现范围删除
d$ 删除到行尾
d^ 删除到非空行首
d0 删除到行首
dw 删除到下一个单词的词首
de 删除到当前或下一单词的词尾
db 删除到当前一个单词的词首
dd:删除光标所在的行
#dd 多行删除
D∶ 从当前光标位置一直删除到行尾,等同d$
命令模式操作复制命令(y, yank) :
y 复制,行为相似于d命令
y$ 复制到行尾
y0 复制到行首
y^ 复制到非空行首
yw 复制到下一个单词的词首
ye:复制到当前或下一单词的词尾
yb:复制到当前一个单词的词首
yy∶复制行
#yy 复制多行
Y∶ 复制整行
命令模式操作
粘贴命令(p, paste) :
p 缓冲区存的如果为整行,则粘贴当前光标所在行的下方;否则,则粘贴至当前光标所在处的后面
命令模式操作
改变命令(c, change)
c: 修改后切换成插入模式
命令模式 - - >插入模式
以下命令和上面同理(一般很少会用到c)
c$
h
c^
c0
cb
ce
cw
#COMMAND
cc:删除当前行并输入新内容,相当于S
#cc
C∶删除当前光标到行尾,并切换成插入模式
命令模式
100iwang [ESC]粘贴“wang"100次
常见Command
y复制
d 删除
gU变大写
gu变小写
例如: 0y$命令
0→先到行头
y →从这里开始拷贝
$→拷贝到本行最后一个字符
命令模式
我感觉以下几个用起来挺费手的
di” 光标在" "之间,则删除" "之间的内容
yi( 光标在()之间,则复制()之间的内容
vi[ 光标在[]之间,则选中[]之间的内容
dtx 删除字符直到遇见光标之后的第一个x字符
ytx 复制字符直到遇见光标之后的第一个×字符
扩展命令模式∶地址定界
地址定界
:start_pos,end_pos
:# 具体第#行,例如2表示第2行
:#,# 从左侧#表示起始行,到右侧#表示结尾行
:#,+# 从左侧#表示的起始行,加上右侧#表示的行数 示例︰2,+3 表示2到5行
:. 当前行
:$ 最后一行
:.,$-1 当前行到倒数第二行
:% 全文,相当于1,$
/pattern/ 匹配pattern的行
/pat1/,/pat2/ 从第一次被pat1模式匹配到的行开始,一直到第一次被pat2匹配到的行结束
#,/pat/ 第#的匹配
/pat/,$ 匹配最后行的
使用方式:后跟一个编辑命令
d
y
w file:将范围内的行另存至指定文件中
r file :在指定位置插入指定文件中的所有内容
命令模式:查找查找
/PATTERN:从当前光标所在处向文件尾部查找
?PATTERN:从当前光标所在处向文件首部查找
提示:以下命令是以上命令使用过后再使用
n:与命令同方向
N:与命令反方向
命令模式∶撤消更改
u 撤销最近的更改
#u 撤销之前多次更改
U 撤消光标落在这行后所有此行的更改
Ctrl - r 重做最后的“撤消”更改
. 重复前一个操作
#. 重复前一个操作#次
查找并替换
在扩展命令模式下完成查找替换操作
格式1:s/要查找的内容/替换为的内容/修饰符(为当前行替换)
格式2:%s/要查找的内容/替换为的内容/修饰符(为全文替换)
格式3:'< ,'s/要查找的内容/替换为的内容/修饰符(为当前行)
如 : 替换2-6行 :2,6s/set/ste/
要查找的内容∶可使用模式
替换为的内容∶不能使用模式,但可以使用\1,12,..等后向引用符号;还可以使用“&”引 用前查找时查找到的整个内容
修饰符︰
i 忽略大小写
I 大小写敏感
g 全局替换,默认情况下,每一行只替换第一次出现
gc 全局替换,每次替换前询问
查找替换中的分隔符/可替换为其它字符
s@/etc@/var@g
s#/boot#/#i
在替换符#/@用其中一个就可以
举例1:
:s/set/ste/ //把当前行的set替换成ste
一般只会替换每一行的第一个,到后面加上g就可以替换整行了 例如 :s/set/ste/g
把2到5的set替换成ste
输入命令 :2,5s/set/ste/
回车结果:
举例3:
把全文的set替换成ste且忽略大小写
输入命令::%s/set/ste/i
以二进制方式打开文件
vim -b binaryfile
扩展命令模式下,利用xxd命令转换为可读的十六进制
:%!xxd
插入模式下,编辑二进制文件
扩展命令模式下,利用xxd命令转换回二进制
:%!xxd -r
保存退出
使用多个"窗口"
多文件分割
vim -o|-O FILE1 FILE2 ...
-o:水平分割
-O:垂直分割
在窗口间切换:Ctrl+w, Arrow
单文件窗口分割
Ctrl+w,s : split,水平分割
Ctrl+w,v : vertical,垂直分割
ctrl+w,q:取消相邻窗口
ctrl+w,o:取消全部窗口
: wqall退出
定制vim的工作特性
配置文件:永久有效
全局:/etc/vimrc
个人: ~/.vimrc
扩展命令模式:当前vim进程有效
(1)行号
显示: set number,简写:set nu
取消显示 : set nonumber, 简写:set nonu
(2)忽略字符的大小写
启用: set ignorecase,简写:set ic不忽略: set noic
(3)自动缩进
启用: set autoindent,简写:set ai
禁用: set noai
:set ai 使得每次首行都对齐输入
添加行号如:
到此文件下写入set number 保存文件,就可以一直有行号了
vim .vimrc
(4)复制保留格式
启用: set paste禁用:set nopasteb
(5)显示Tab和换行符^I和$显示
启用: set list
禁用: set nolist
(6)高亮搜索
启用: set hlsearch
禁用: set nohlsearch
(7)语法高亮
启用: syntax on
禁用: syntax off
(8)文件格式
启用windows格式: set fileformat=dos
启用unix格式: set fileformat=unix
简写set ff=dos|unix
(9)设置文本宽度
set textwidth=65(vim only)
set wrapmargin=15
(10)设置光标所在行的标识线
启用: set cursorline,简写set cul
禁用:set nocursorline
:help option-listt
set or :set al
vi/vim内置帮助
:help
:help topic
Use :q to exit help