vi:Visual Tnterface文本编辑器
vim:vi Improved vi的加强版
文本编辑种类:
行编辑器:sed
全屏编辑器:nano,vi,vim
其他编辑器::
gedit:一个简单的图形编辑器
gvim:一个vim编辑器的图形版本
vim使用格式
+# :打开文件后,直接让光标处于第#行的行首
+/pattern:打开文件后,直接让光标处于第一个被模式匹配到的行的行首
+ file:打开文件,光标在最后一行
-b file:二进制方式打开文件
-d file1 file2…:比较多个文件
-m file :只读打开文件
如果该文件存在,文件被打开并显示内容
如果该文件不存在,编辑完后第一次保时创建它
vim的三种主要模式
命令模式:默认进入文件就处于此模式==>移动光标,剪切/粘贴文本
插入(编辑)模式:修改文本
扩展命令模式:保存,退出 ==>我习惯叫末行模式
ESC键:退出当前模式
ECS键ESC键:总是返回到命令模式
模式转换
命令模式(默认模式)—>插入模式
i:inset,在光标所在处输入
I:在光标所在行的行首输入
a:append,在光标所在处的后面输入
A:在光标所在行的行尾输入
o:在当前光标所在行的下方打开一个新行
O:在当前光标所在行的上方打开一个新行
插入模式–>命令模式
Esc键
命令模式—>扩展命令模式
:
扩展命令模式—>命令模式
Esc键
锁定和解锁:
ctrl+s锁定 ctrl+q解锁
关闭文件:
在命令模式下
ZQ:不保存退出
ZZ:保存并退出
在扩展命令模式下
:q退出
:wq保存退出
:q!强制退出不保存
:x保存退出
:w /path/to/somefile :保存至新文件(类似另存为)
命令模式光标跳转
字符跳转:
h:左 l:右 j:下 k:上
#command(hjkl):跳转#个字符
单词跳转:
w:下一个单词的词首
e:当前或下一个单词的词尾
b:当前或前一个单词的词首
#command(web):跳转#个单词
当前页跳转:
H:页首 M:页中间 L:页尾
行首行尾跳转:
^:跳转至行首的第一个非空白字符
$:跳转至行尾
0:跳转至绝对行首
行间跳转:
#G:跳转至#行
G:跳转最后一行
1G或者gg:跳转至第一行
句间跳转:
(:上一句
):上一句
段落间跳转:
{ :上一段
} :下一段
命令模式翻屏操作
ctrl+f :向文件尾部翻一屏
ctrl+b :向文件首部翻一屏
ctrl+d :向文件尾部翻半屏
ctrl+u :向文件首部翻半屏
命令模式操作
字符编辑
x :删除光标处的字符
#x:删除光标处起始的#个字符
xp:交换光标所在处的字符及其后面字符的位置
~ :转换大小写
替换命令
r:替换光标所在处的字符
R:切换成REPLACE模式
删除命令:
d:删除命令可结合光标跳转字符,实现范围删除
d$:删除到行尾
d^:删除到非空行首
d0:删除到行首
dw:删除光标所在处到下一个单词的词首的内容
de:删除光标到当前或下一个单词的词尾的内容
db:删除光标到当前或前一个单词的词首的内容
#command:删除#个单词
dd:删除整行
#dd:删除#行
D:删除光标所在处到行尾的字符,留空行,等同于d$
执行了一些命令,结果如下
-
执行了d$,删除了光标到行尾的字符(此处光标在行首)
-
执行了d^,删除了光标到行首的字符(非空白)(我在行首加了空白字符)
-
执行了d0,删了了光标到行首的字符(包含空白字符)
-
执行了dw,删除了光标所在处到下一个单词的词首的内容
-
执行了de,删除光标到当前或下一个单词的词尾的内容
-
执行了db,删除光标到当前或前一个单词的词首的内容
-
执行了dd,删了整行
-
又执行了2dd,删除了两行
-
执行了D,删除光标所在处到行尾的字符
这截图和上面的说明看的我自己都蒙了,
复制命令(y,yank):
y: 复制,和d命令用法类似
y$: 复制光标所在处到行尾
y^:复制光标所在处到非空行首
y0:复制光标所在到行首
yw:复制光标所在处到下一个单词的词首的内容
ye:复制光标到当前或下一个单词的词尾的内容
yb:复制光标到当前或前一个单词的词首的内容
#command:复制#个单词
yy复制整行
#yy:复制#行
Y:复制整行
粘贴命令(p,paste):
p:缓冲区存的如果为整行,则粘贴当前光标所在行的下方,
否则,则粘贴至当前光标所在处的后方
P:缓冲区存的如果为整行,则粘贴当前光标所在行的上方,
否则,则粘贴至当前光标所在处的前方
整行
非整行
改变命令(c,change)
命令模式—>插入模式,显示删除操作
c:删除命令。可结合光标跳转字符,实现范围删除
c$:删除光标所在处到行尾的字符
c^:删除光标所在处到非空行首的字符
c0: 删除光标所在处到绝对行首的字符
cw:删除光标所在处到下一个单词的词首的内容
ce:删除光标到当前或下一个单词的词尾的内容
cb :删除光标到当前或前一个单词的词首的内容
#command(dw,de,db) 3dw:向后删了三个单词
c:删除当前光标到行尾,并切换成插入模式
#c c 3cc:删除光标所在处的行起始的3行,然后
以上是删除光标所在处的一些行或字符,然后转换为插入模式
c,d,y的一些可以通用的命令
命令模式下还有些特殊用法:
100iwang[esc]粘贴“wang”100次
<start position> <command> <end position>
command:
y复制,d删除,gU变大写,gu变小写
例如我使用了0gU$命令,从行首到行尾都变成大写字母
这里我使用了.gu$, .表示当前位置,到行尾变成那个小写字母
扩展模式:地址定界
和sed的地址定界差不多
#:特定的第#行,例如5即第五行
. :表示当前行
#,# 指定行范围。左起始行,右结束行
#,+#:指定行范围,左侧为起始行的绝对编号,右侧问哦相对左侧行号的偏移量
例如:3,+7 为第三行开始,后面的7行,包含第三行
. +6:当前行,到后面的6行,共计7行
.,$-1:当前行到倒数第二行
1,.,$:全文
%:全文
/pattern/:第一次被模式所匹配到的行=======>从光标所在处起始
/first/,$:从光标所在处起始向文件尾部第一次被模式所匹配的行到最后一行
/pattern1/,/pattern/:从光标所在处起始向文件尾部,第一个被pattern1匹配的行到第一个被pattern2所匹配的行结束之前的所有行
使用方式:后跟一个编辑命令
d,y,c
w /path/to/somefile:将范围内的文本保存至指定的文,y件中
r /path/form.somefile :将指定的文件中的文本读取并插入指定位置
扩展模式:查找
/pattern:从当前光标所在处向文件尾部查找能够被当前模式匹配到的使用字符串,
?pattern:从当前光标所在处向文件首部查找能够被当前模式匹配到的使用字符串,
n;下一个。与命令方向相同
N: 上一个,与命令方向相反
扩展模式:查找并替换
s:末行模式的命令;使用格式
s/要查找的内容/替换为的内容/修饰符
要查找的内容:可用正则表达式;
替换为的内容:不能使用正则表达式,但可以引用
如果要“查找的内容”部分在模式中使用了分组符号:
在“替换为的内容”中使用 后向引用; \1,\2,
也可以使用“&”引用前面查找时查找到的整个内容
直接引用查找模式 匹配到的全部文本
修饰符:
i:忽略大小写
g:全局替换,意味着一行中如果匹配到多次,则均替换,默认替换匹配到的行的第一个出现的
gc:全局替换,每次替换前询问
可把分隔符替换为非常用字符
s@@@@ ,s###
命令模式:撤销更改
u撤销最近的更改
#u撤销之前的#次修改
U撤销光标落在这行后所有此行的更改
ctrl+r恢复此前的撤销操作==>感觉撤销的错了,取消撤销的动作
点号. :重复执行前一个编辑操作
#.:重复前一个操作#次
vim的寄存器
有26个命名寄存器和1个无名寄存器,长存放不同的剪贴板内容,可以不同会话键共享
用a,b,c…..z表示,用“表示寄存器,放在数字和命令之间
例如:3”tyy表示复制3行到t寄存器中
“tp表示将t寄存器内容粘贴
复制第四行到a寄存器,然后将a寄存器内容到粘贴至光标所在行的下一行
未指定,将使用无名寄存器
有10个数字寄存器,用数字0-9表示,0存放最近复制的内容,1存放最近删除内容。
当新的文本变更和删除时,1转存到2,2转存到3,以此类推,数字寄存器不能再
不同会话间共享
编辑二进制文件
以二进制方式打开文件
vim -b binaryfile
扩展命令模式下,利用xxd命令转换为可读的十六进制
:%!xxd
扩展命令模式下,利用xxd命令转换回二进制
:%!xxd -r
可视化模式
允许选择的文本块
v:字符
V:行
ctrl+v 块
可视化键用于移动的键
方向键,w,),}
突出显示的文字可以被删除,复制,变更,过滤,搜索 / 替换等
执行删除命令
vim多文件模式
vim file1 file2 ….
next:下一个
prev:前一个
first:第一个
last:最后一个
wall:保存所有
qall:退出所有
wqall:保存退出所有
多窗口显示
多文件切割
vim -o file file2 水平切割
vim -O file file2 垂直切割
单文件窗口切割;
ctrl+w,s:水平分隔
ctrl+w,v:垂直分隔
ctrl+w,q:取消相邻窗口
ctrl+w,o取消全部窗口
:wqall全部保存退出
vim的工作特性
配置文件:永久有效
全局:/etc/vimrc
个人:~/.vimrc
如下配置显示行号和自动缩进
扩展模式:对当前进程有效
-
行号
显示: set number 简写为set nu
取消显示:set nonumber 简写 set nonu
2.括号成对匹配
匹配:set shuowmatch 简写set sm
取消: 简写set nosm
3.自动缩进
启用:set ai
禁用:set noai
4.高度搜索
启用:set hlsearch
禁用:set nohlsearch
5.语法高亮
启用:syntax on
禁用:syntax off
6.忽略字符的大小写
启用:set ic
不忽略:set noic
7.文件格式
启用:filefoemat=unix ==>linux
不忽略:fileformat=dos==>windows
8.设置文本宽度
:set textwidth=65(vim only)
:set wrapmargin=15
练习:
1 、复制/etc/profile 至/tmp/ 目录,用查找替换命令删除
/tmp/profile 文件中的行首的空白字符
指令:
扩展命令模式下
:%s@^[[:space:]]\+@@
2 、复制/etc/rc.d/init.d/functions 文件至/tmp 目录,用查
找替换命令为/tmp/functions 的每行开头为空白字符的行的
行首添加一个#号
指令:
扩展命令模式下
:%s@^[[:space:]]\+@#@
3 、如何设置tab 缩进为4 个字符?
指令:
vim .vimrc 然后设置tabstop=4,这个是针对当前用户 要设置全局要在/etc/vimrc
4 、复制/etc/rc.d/init.d/functions 文件至/tmp 目录;替换
/tmp/functions 文件中的/etc/sysconfig/init 为/var/log; ;
在扩展命令模式下:
:%s@/etc/sysconfig/init@/var/log@
5、删除/tmp/functions 文件中所有以# 开头,且# 后面至少
有一个空白字符的行的行首的# 号;
在扩展命令模式下
%s@^#\([[:space:]]\+\)@\1@
原创文章,作者:qiuwei,如若转载,请注明出处:http://www.178linux.com/32418