简介:
vim的前身vi:文本编辑器
文本:ASCII,Unicode...
文本编辑种类:
行编辑器:sed
全屏编辑器:nano
使用:
vim: 模式化的编辑器
基本模式:
(1) 命令模式(打开vim的默认模式)
(2) 输入模式
(3) 末行模式(内置命令行接口)
打开文件:
# vim [OPTION]... FILE...
Note:目标文件是否存在都可以打开,不存在时可以创建,但其目录名必须存在
OPTION:
+#:打开文件后,直接让光标处于第#行的行首
+/模式:打开文件后,直接让光标处于第一哥被模式匹配到的行的行首
模式转换:
命令模式 --> 插入模式
i:在光标所在处的前面
a:在光标所在处的后面
o:在当前光标所在行的下方打开一个新行
I:在当前光标所在行的行首输入
A:在当前光标所在行的行尾输入
O:在当前光标所在行的上方打开一个新行
输入模式 --> 命令模式(ESC键)
命令模式 --> 末行模式(:)
末行模式 --> 命令模式(ESC键)
关闭文件:
:q 退出(末行模式关闭)
:q! 强制退出,丢弃做出的修改
:wq 保存退出
:wq! 强制保存退出
:x 保存退出
:w "文件路径" 将当前所有内容保存至指定的文件中
ZZ:命令模式下使用,保存退出
光标跳转:
字符间跳转:
h:左
j:下
k:上
l:右
#COMMAND:跳转由#指定的个数的字符
例:#3l:像右侧跳三个字符
#3k:像上放跳三行
单词间跳转:
w:跳到下一个单词的词首
b:跳到当前或上一个词的词首
e:当前或下一个单词的词尾
#COMMAND:由#指定一次跳转的单词数
行首行尾跳转:
^:跳转至行首,第一个非空白字符
0:跳转至行首,忽略是否有空白字符
$:跳转至绝对行尾,忽略是否由空白字符
行间移动:
#G:跳转至由#指定行
G:跳转至最后一行
1G,gg:回到文件首部
句间移动(了解即可):
):跳转至下一个句子
(:跳转至上一个句子
vim的编辑命令:
字符编辑:
x:删除光标处的单个字符
#x:删除光标所在处起始的#字符
xp:交换光标所在处的字符及其后面字符的位置
替换命令(r):
r:替换光标所在处的字符
删除命令:
d:删除命令,可结合光标跳转字符,实现范围删除
d$:光标到行尾的内容都删除
d0:光标到行首的内容都删除
dj:光标到下行的内容都删除
dk:光标到上行的内容都删除
...
dd:删除一整行
#dd:光标所在处像下一共删除#行
D:删除一整行,会留有空白行
#COMMAND:由#指定删除的单词数字
粘贴命令(p):
p:缓冲区中存储的如果为整行内容,则粘贴至当前光标所在行的下方,如果为非整行,则粘贴至当前光标所在出的后面
P:缓冲区中存储的如果为整行内容,则粘贴至当前光标所在行的上方,如果为非整行,则粘贴至当前光标所在出的前面
复制命令(y):
y:复制,工作行为相似于d命令:
y$:复制到行尾
y0:复制到行首
...
yy:复制一整行
#yy:复制多行,算上当前行加上#就是要复制的行的行数
改变命令(c):
c:修改
命令模式 --> 输入模式
ce:删除一个单词进行修改
c$:删除至行尾进行修改
c^:删除至行首进行修改
cc:直接删除并输入内容
#cc:同时删除多少行并输入内容
其他编辑操作:
可视化模式:
v:按字符选定光标跳转时滑过的
V:按行选定
Note:结合编辑命令使用,y键复制选中的行或字符,d键删除选中的行或字符....
撤销命令(u)
u:默认会把缓冲区中的执行还原,默认缓冲区能存50条
#u:指定撤销次数,默认撤销一次
Ctrl+r:撤销此前的撤销
重复前一个编辑操作:
. : 比如dd了一行,然后再按.号就相当于又执行了dd
翻屏操作:
Ctrl+f :向文件尾部翻一屏
Ctrl+b :向文件首部翻一屏
Ctrl+d :向文件尾部翻半屏
Ctrl+u :向文件首部翻半屏
vim中的末行模式:
内建的命令行接口
(1) 地址定界
:start_pos,end_pos
#:具体第#行,例如2就表示第2行
#,#:从#行到第#行,例如2,100就是2到100行
#,+#:从左侧#表示行起始,加上右侧#表示的个行
.:当前行
$:最后一行
%:全文=1,$
/模式1/,/模式2/(两个模式之间的所有行):
从第一次被模式1匹配到的行开始,一直到第一次被模式2匹配到的行结束
#,/模式/:指定的行开始到第一次匹配到模式的行结束之间的行
/模式/,$:从第一次匹配到模式的行开始一直到尾部之间的所有行
使用方式:
后跟一个编辑命令
d
例:1,20d #删除1到20的所有行
y
例:
:1,20y #复制1到20的所有行
w "文件绝对路径"
例:
:1,20w /tmp/vim.txt #将1到20的所有行保存至后方指定的文件中
r "已存在的文件绝对路径"
例:
:r /etc/fstab #将后方指定的文件内容读取到当前文件光标所在位置
:100 /etc/issue #读取/etc/issue文件到当前文件的第100行处
(2) 查找
/模式(从当前光标所在处像文件尾部查找)
n:从光标处像下面的行,到文件尾部后,会从第一行再次遍历查找
N:从光标处像上面的行方向查找,到文件首部后,会从最后一行遍历查找
例:
/\<r..t\> #查找当前文件中以r开头中间跟两个任意字符以t结尾的字符,"n"像下查找,"N"像上查找
?模式(从当前光标所在处像文件首部查找)
(3) 查找并替换
s:在末行模式下完成查找替换操作
s/要查找的内容/要替换成的内容/修饰符
要查找的内容可使用模式
替换为的内容不能使用模式,但可以使用\1,\2...等后向引用符号,还可以使用&引用前面查找到的整个内容
修饰符:
i:查找时忽略大小写
g:全局替换,不带g,默认情况下,每一行只替换第一次出现
例:
:.,$s/r\(..\)t\R\1T/
查找替换中的分隔符/可替换为其它字符,例如:
s@@@
s###
练习:
1、复制/etc/grub2.cfg至/tmp目录,用查找替换命令删除/tmp/grub2.cfg文件中的行首的空白字符
解: :%s#\(^[[:space:]]\+\)\(.*\)#\2#g 或者 :%s/^[[:space:]]// #第一种方法复杂,自己想的,第二种是给的官方答案
2、复制/etc/rc.d/init.d/functions文件至/tmp目录,用查找替换命令为/tmp/functions的每行开头为空白字符的行的行首添加一个#号
解: :%s@\(^[[:space:]]\+.*\)@#&@g 或者 :%s/^[[:space:]]/#& #第一种方法自己想的,第二种给的官方答案
vim中的多文件模式:
vim FILE1 FILE2 FILE3 ....
:next:跳到当前文件的下一个文件
:prev:跳到当前文件的上一个文件
:last:跳到最后一个文件
:first:跳到第一个文件
:wall :保存所有文件
:qall :退出所有
例:
vim /tmp/{functions,grub2.cfg,test.txt}
默认打开第一个文件是functions,(:next)可以到grub2.cfg文件再次(:next)可以转到test.txt文件,返回上一个文件是(:prev),三个文件之间可以互相复制粘贴
窗口分隔模式:
vim -o|-O FILE1 FILE2...
-o:水平分割(上下两个文件),在文件中使用Ctrl+w,s再次水平分割
-O:垂直分割(左右两个文件),在文件中使用Ctrl+w,v再次垂直分割
在窗口间切换:Ctrl+w,Arrow
单文件窗口分隔:
Ctrl+w,s:水平分割
Ctrl+w,v:垂直分割
定制vim的工作特性:
配置文件(永久有效):
全局:/etc/vimrc
个人:~/.vimrc
末行(当前vim有效):
(1) 行号
显示:set number(set nu)
取消显示:set nonumber(set nonu)
(2) 括号匹配
匹配:set showmatch(set sm)
取消匹配:set noshowmatch(set nosm)
(3) 自动缩进
启用:set autoindent(set ai)
禁用:set noautoindent(set noai)
(4) 高亮搜索
启用:set hlsearch
禁用:set nohlsearch
(5) 语法高亮
启用:syntax on
禁用:syntax off
(6) 忽略字符大小写
启用:set ic
不忽略:set noic
获取帮助:
:help
:help subject
练习:
1、复制/etc/rc.d/init.d/functions文件至/tmp目录,替换/tmp/functions文件中的/etc/sysconfig/下的路径为/var/log
解: :%s#/etc/sysconfig#/var/log#g
2、删除/tmp/functions文件中所有以#开头,且#后面至少有一个空白字符的行的行首的#号
解: :%s@^#[[:space:]]\+@@g