现讲下VIM
VIM有三个基本模式:1、编辑模式 2、输入模式 3、末行模式
编辑模式是进入VIM界面的模式,也算是默认模式
输入模式是进行文本编辑的模式
末行模式类似于功能栏
编辑模式可以算是过度模式,模式之间的切换是需要先转换到编辑模式之后再进行转换到其他模式
编辑模式转换到输入模式:i(insert,在光标处输入)
a:(append光标所在位置的后一位输入)
o(在光标所在行的正下方添加一行)
I(在光标所在行的行首输入内容)
A(在光标所在行的行尾输入内容)
O(在光标所在行的正上方添加一行)
输入模式转换到编辑模式:esc键就可以了
编辑模式-->末行模式:直接输入冒号即可
末行模式的一些操作:
set nu 显示行号
set nonu 取消显示行号
1,2d 删除第1-2行
u 撤回操作
Ctrl+r 取消撤回操作 (已经执行了a b c三步操作,当前在c步骤,u 返回到b步骤,Ctrl+r返回到c步骤)
q 退出VIM 在没有任何改动的情况下
q! 强制退出 不保存修改
quit! 强制退出,不保存修改,这个力度更大
wq 保存并退出
x 保存并退出
w /file.path 另存为 但是界面还是停留在原文件,如果不保存修改,需要q!退出
末行模式转换到编辑模式 esc两次
VIM的基本操作
有些操作不能演示,需要自己练习
Shift+z 两个大写的Z就保存并退出VIM界面 直接输入即可
h光标向左移动 l(L)光标向右移动 j光标向下移动 k光标向上移动
还可以数字+移动方向 步跳为一个字符(20h 25l)
w 光标移动到下一个单词的词首
b 光标移动到当前或者前一个单词的词首
e 光标移动到当前或者后一个单词的词尾
还可以数字+移动方向 步跳为一个单词(20b 30e)
^ 光标移动到当前行的第一个非空白字符(tab不算) 直接输入
0 光标移动到当前行的行首
$ 光标移动到当前行的行尾(tab不算)
nG 光标移动到第n行
1G 光标移动到第一行
G 光标移动到最后一行
步跳为一句话 ( 或者 )
步跳为一段话 { 或者 }
Ctrl+f 向文件尾部翻一屏
Ctrl+d 向文件尾部翻半屏
Ctrl+b 向文件首部翻一屏
Ctrl+u 向文件首部翻半屏
x 删除光标所在位置的字符
nx:删除光标所在位置后的n个字符
xp:将光标所在位置的字符与光标后面的字符进行调换(先按x会删掉光标所在位置的字符,p会将删除掉的字符重新显示到光标后一位)
r"CHAR":将光标所在位置的字符更换为CHAR字符 输入rb 将光标所在位置的字符更换为b字符
d 可以与定位符一起使用
d$:删除光标所在位置到该行行尾的所有字符
d^:删除光标前一位到该行行首的所有字符
dw:删除光标所在位置(光标位置上的字符需要删除)到下一个单词词首(词首不删除)的位置
de:删除光标所在位置的字符(光标位置上的字符需要删除)到当前单词的词尾或者删除光标所在位置的下一个单词
db:删除光标所在位置到当前单词的词首(光标位置上的字符不删除)或者删除光标所在位置的字符到前一个单词的词首(整个单词被删除)
nd{w\e\b} 可以指定删除n个单词
dd 删除光标所在的行
ndd 向下删除光标所在行的n行
p(小写,粘贴):缓冲区中的内容如果为整行,则粘贴到光标所在行的正下方,否则,粘贴到光标所在位置的后方
P(大写,粘贴): 缓冲区中的内容如果为整行,则粘贴到光标所在行的正上方,否则,粘贴到光标所在位置的前方
y:复制操作,用法与d的用法差不多 yy复制当前行,2yy复制当前行和下一行 仅仅只是复制,如果只输入一个y就是复制两行。
c:从编辑模式转换到输入模式 实现删除操作 与d相同,此外可以直接进入输入模式
v(小写):可以通过鼠标选择内容 步跳为1个字符
V(大写):可以通过鼠标选择内容 步跳为1行
v命令结合 d c y使用
.(点) 重复执行上一个编辑操作
Shift+$ 光标移动到行尾
Shift+^ 光标移动到行首
其他操作
1、vim +n file.name 打开文件并将光标移动到第n行的行首 vim +7 123.file
2、+/关键字:打开文件后,光标移动到第一个匹配关键字的行的行首 vim +/This 123.file
3、+ 不跟任何数字,打开文件后,光标处于末尾行的行首
4、将其他文件内容插入到当前文件中。
上面是当前的文件内容
这个是命令 :15r /tmp/A/456
在第15行的正下方插入456文件的内容。
5、地址定界
:start_pos [,end_pos]
开始位置 结束位置
如果只有个start_pos 就指定一行,如果有两个数字就是指范围end的数值>start的数值
end可以用+n 表示 例如 2,+7 第二行后的7行一共8行,第二行也要算
.表示当前行
$表示最后一行
%表示全文
/pattern/:表示从光标所在行之后(包含光标所在行)第一次匹配到关键字的行
/pattern1/,/pattern2/:表示从光标所在行之后(包含光标所在行)第一次匹配到pattern1为起始,到第一次匹配pattern2为结束。
地址界定仅仅是指明一个范围,至于在这个范围内干什么就需要看之后的命令了,比如说在这个范围内把某些关键字进行替换。
6、查找
/pattern 从光标所在处向文件尾部查找指定关键字
?pattern 从光标所在处向文件首部查找指定关键字
n:下一个,与命令方向相同
N:上一个,与命令方向相反
输入完关键字后需要敲一下回车 说明输入完毕
7、查找并替换
s/old pattern/new pattern
s表明命令作用是查找并替换,old pattern输入旧字符 new pattern输入新字符
还可以加修饰符:1、i 查找时忽略大小写
2、g 全局替换,一行中如果匹配了多次,则都进行替换(默认只替换每一行的第一次匹配的字符串)
替换love为Love
.是指定修改范围为当前行
s命令的作用是查找并替换
love是原文内容 Love是新的字符串,由于没有加修饰符,仅仅只替换了第一行中第一个匹配的字符串
这个例子中g为修饰符将第一行中所有匹配的字符串全部都修改了。
指定行范围来修改指定内容 第一行与第二行范围内的字符修改br/>

练习:
在123.file中,在全局范围内,将以l开头的单词替换为L开头的单子

:%s/\<l\([[:alpha:]]\+\)\>/L\1/g
:%s@\<l\([[:alpha:]]\+\)\>@L\1@g
注意在末行模式中单词定位符必须用\< \> 不能使用\b
在123.file中,在全局范围内,以l开头的单子后面都加上er字符
:%s/\<(l[[:alpha:]]+)\>/\1er/g
将文件中第一行的#号去掉
:1s/^#//
新字符什么都没输入就是空
用查找替换命令为文件中第18行的每个以空白字符开头的行首加上#号
:18s/(^[[:space:]]+[^[:space:]])/#\1/
命令中的非空字符主要是为了防止第18行是空白行
定制VIM的工作特性
有些VIM的功能可能需要默认就开启 比如显示行号。 如果在末行模式中输入命令,那么仅仅是本文档有效。
可以通过修改/etc/vimrc(全局有效) 或者 ~/.vimrc(个人有效) 文件中的内容可以修改VIM的默认设置。
1、行号
set nu 显示行号
set nonu 不显示行号 默认选项
2、括号匹配高亮显示
括号匹配高亮显示 这个仅适用与本地终端
set showmatch=set sm
set nosm
如果扩展的高亮颜色不习惯的话 需要边界vimrc文件,修改完文件后需要重新读入文件 DarkRed 为括号高亮的颜色。
http://www.runoob.com/try/color.php?color=Black 可用的颜色都在这里了
colorscheme desert
hi MatchParen ctermbg=DarkRed guibg=lightblue
3、语法高亮
syntax on/off
4、搜索结果高亮
/keywords 查找关键字
set hlsearch 高亮显示
set nohlsearch 不高亮显示
5、自动缩进 编程的时候有帮助
set ai 自动与上一行的开头字母对其
se noai(默认配置) 不许上一行的行首对其
6、如何设置tab缩进4个字符
set tabstop(ts)=4
7、获取末行模式的命令帮助
help set 查看set怎么用
8、字符大小写
set ic (set ignorecase)忽略字符大小写
set noic(set noignorecase) 不忽略字符大小写
本文转自 yueyue207 51CTO博客,原文链接:http://blog.51cto.com/yueyue207/2051425