vim编辑器
vi:Visual Interface,文本编辑器
文本:ASCII,Unicode
文本编辑种类:
行编辑器:sed
全屏编辑器:nano,vi
VIM - Vi IMproved
使用VIM
vim:模式化的编辑
基本模式:
编辑模式,命令模式:
输入模式:
末行模式:
内置的命令行接口
打开文件:
#vim [option]... FILE...
+#:打开文件后,直接让光标处于第#行的行首
+/PATTERN:打开文件后,直接让光标处于第一个被PATTERN匹配到的行的行首
模式转换:
编辑模式-->输入模式
i:insert,在光标所在处输入
I:在当前光标所在行行首输入
a:append,在光标所在处后面输入
A:在当前光标所在行行尾输入
o:在当前光标所在行下方打开一个新行
O:在当前光标所在行上方打开一个新行
c:
C:
输入模式-->编辑模式
ESC
编辑模式-->末行模式
:
末行模式-->编辑模式
Ctrl+c或两次ESC
关闭文件:
:q 退出
:q! 强制退出,丢弃做出的修改
:wq 保存退出
:x 保存退出
:w /PATH/TO/SOMEWHERE
ZZ:保存退出(编辑模式下)
光标跳转:
字符间跳转:
h,j,k,l
h:左
j:下
k:上
l:右
#COMMAND:跳转由#指定个数的字符
单词间跳转:
w:下一个单词的词首
e:当前或下一单词的词尾
b:当前或上一个单词的词首
#COMMAND:跳转由#指定个数的单词
行首行尾跳转:
^:跳转至行首的第一个非空白字符
0:跳转至行首
$:跳转至行尾
行间移动:
#G:跳转至由#指定的行
G:最后一行
1G,gg:跳转至首行
句间移动:
):下一个句子
(:上一个句子
段间移动:
}:下一段
{:上一段
vim的编辑命令:
字符编辑:
x:删除光标所在处的字符
#x:删除光标所在处向后#个字符
xp:交换光标所在处的字符及后面字符的位置
替换命令:
r:替换光标所在处的字符
删除命令:
d:删除命令,可结合光标跳转字符,实现范围删除
d$:光标到行尾的内容
d^:光标到行首的内容
d0:光标到行首的内容
dw:
de:
db:
#COMMAND
#dw:
#de:
#db:
dd:删除光标所在处的整行
#COMMAND:删除#行
粘贴命令(p,put,paste):
p(小写):缓冲区存储的如果为整行,则粘贴在当前光标所在行的下方。否则,则粘贴至当前光标所在处的后面
P(大写):缓冲区存储的如果为整行,则粘贴在当前光标所在行的上方。否则,则粘贴至当前光标所在处的前面
复制命令(y,yank):
y:复制,工作行为相似于d命令:
y$
y0
y^
ye
yw
yb
#COMMAND
yy:复制行
#yy:复制#行
改变命令(c,change)
c:修改
编辑模式-->输入模式
c$
c0
c^
ce
cw
cb
#COMMAND
cc:删除并输入新内容
#cc:删除#行
可视化模式:
v:按字符选定
V:按行选定
Note:经常结合编辑命令
d,c,y
撤销此前的编辑:
u(undo):撤销此前操作
#u:撤销此前#次操作
撤销此前的撤销:
Ctrl+r
重复前一个编辑操作:
.
翻屏操作:
Ctrl+f:向文件尾部翻一屏
Ctrl+b:向文件首部翻一屏
Ctrl+d:向文件尾部翻半屏
Ctrl+u:向文件首部翻半屏
vim自带的教程
vimtutor
vim中的末行模式:
内建的命令行接口
(1)地址定界
:start_pos,end_pos
#:具体第#行,例如2表示第2行
#,#:从左侧#表示行起始,到右侧#表示行结尾
#,+#:从左侧#表示行起始,加上右侧#表示的行数
.:当前行
$:最后一行
例如:.,$-1:从当前行到倒数第二行
%:全文,相当于1,$
/pattern1/,/pattern2/:从第一次被pattern1模式匹配到的行开始,一直到第一次被pattern2匹配到的行结束
常见的用法:
#,/pattern/
/pattern/,$
使用方式:
后跟一个编辑命令
d
y
w /PATH/TO/SOMEWHERE:将范围内的行另存至指定文件中
r /PATH/FROM/SOMEFILE:在指定位置插入指定文件中的所有内容
(2)查找
/PATTERN:从当前光标所在处向文件尾部查找
?PATTERN:从当前光标所在处向文件首部查找
n:与命令同方向查找符合PATTERN的内容
N:与命令反方向查找符合PATTERN的内容
(3)查找并替换
s:在末行模式下完成查找替换操作
s/要查找的内容/替换为的内容/修饰符
要查找的内容:可使用模式
替换为的内容:不能使用模式,但可以使用\1,\2,...等后向引用符号,还可以使用"&"引用前面查找时查找到的整个内容
修饰符:
i:忽略大小写
g:全局替换:默认情况下,每一行只替换第一次出现
查找替换中的分隔符/可替换为其他字符,例如
:% s /\/var\/log\/message/\/etc\/passwd/g
可以写成:% s@/var/log/message@/etc/passwd@g
练习:
1.复制/etc/grub.conf至/tmp目录,用查找替换命令删除/tmp/grub.conf文件中的行首的空白字符
2.复制/etc/rc.d/init.d/functions文件至/tmp目录,用查找替换命令为/tmp/functions的每行开头为空白字符的行的行首添加一个#号
原文地址:http://sanyuan.blog.51cto.com/873226/1977186