发布日期:2016-10-19 16:06:49

学习vim首先了解它的几种模式,然后学会使用help。有了这些后就记住一些常用的命令。

1. 复制粘贴 (不考虑ctrl+c 和ctrl +v的情况下)

y为复制(yank)

p为粘贴(paste)在光标的后面

P为粘贴在光标的前面

d为剪切

x为删除

复制剪切前需要选择复制内容,所以y 命令是与当前光标位置相关的。

yw              表示拷贝从当前光标光标所在单词结尾的内容
y0              表示拷贝从当前光标到光标所在行首的内容  
y$              表示拷贝从当前光标到光标所在行尾的内容  
yfa             表示拷贝从当前光标到光标后面的第一个a字符之间的内容。a是可以替换的,它可以是b,c,d,e,f,g等26个英文字母中的任意一个。
yy              表示拷贝光标所在行
dd                表示删除光标所在行

2. 光标的移动

单格移动:

前(h)后(l)上(k)下(j)

行间移动:  

gg 为文本开始
G为文本结尾
home键 为该行的行首
end键 为该行的行尾
^为行首的第一个非空白字符
$为该行的行尾
3$表示移动下面的第三行的行尾 (999999$表示可以到文本的末尾 类似于G$)

词间移动

w为移至下一个单词
b为移至上一个单词

3.  查找

单行内单字符查找

fa 表示在当前行中查找下一个字母a并移动光标

Fa 表示在当前行中查找上一个字母a并移动光标

文本中查找字符

/contenttobesearch

找到结果之间可以同过n或N来切换移动光标

4 显示相关的命令

:set hlsearch 表示高亮显示查询结果

:set nohlsearch 表示不用高亮显示查询结果

:set number表示显示行数

:set nonumber表示不用显示行数

CTRL + G 表示显示当前光标所在位置的信息。

CTRL + U 表示向上滚动文档半页

CTRL + D表示向下滚动文档半页34G

5. 删除(x)修改(c)撤销undo ( u) 重做 redo  (CTRL + R)replace单字符(r)

c表示剪切后并修改(进入编辑模式)

r命令表示替换当前字符,并不进入编辑模式。

6 .连接行命令

J表示连接当前行与下一行

3J表示连接当前行与下三行

7. 字符语境相关的命令

~ 表示修改一个字符的大小写。大写的话就变成小写,小写的话就变成大写。其行为仅限于当前行操作,改变当前光标的字符的大小写后并移动光标至下一个字符,直至行尾。不需要enter键。

gu:切换为小写,gU:切换为大写。 需要enter键

8. 其他命令

. 命令表示重复上一个删除或修改命令

search history: / 与上下键配合可以浏览查询历史。

9. 正则表达式替换

:[range]s/from/to/[flags]

range:搜索范围,如果没有指定范围,则仅作用于当前行。

:1,10s/from/to/ 表示在第1到第10行(包含第1,第10行)之间搜索替换;
:10s/from/to/ 表示只在第10行搜索替换;
:%s/from/to/ 表示在所有行中搜索替换;
1,$s/from/to/ 同上。

flags 有如下四个选项

c confirm,每次替换前询问;
e error, 不显示错误;
g globle,不询问,整行替换。如果不加g选项,则只替换每行的第一个匹配到的字符串;
i ignore,忽略大小写。
这些选项可以合并使用,如cgi表示不区分大小写,整行替换,替换前询问。

正则表达式

元字符    说明

.    匹配任意字符
[abc]    匹配方括号中的任意一个字符,可用-表示字符范围。如[a-z0-9]匹配小写字母和数字
[^abc]    匹配除方括号中字符之外的任意字符
\d    匹配阿拉伯数字,等同于[0-9]
\D    匹配阿拉伯数字之外的任意字符,等同于[^0-9]
\x    匹配十六进制数字,等同于[0-9A-Fa-f]
\X    匹配十六进制数字之外的任意字符,等同于[^0-9A-Fa-f]
\l    匹配[a-z]
\L    匹配[^a-z]
\u    匹配[A-Z]
\U    匹配[^A-Z]
\w    匹配单词字母,等同于[0-9A-Za-z_]
\W    匹配单词字母之外的任意字符,等同于[^0-9A-Za-z_]
\t    匹配<TAB>字符
\s    匹配空白字符,等同于[\t]
\S    匹配非空白字符,等同于[^\t]
 

一些普通字符需转意

元字符    说明
\*    匹配* 字符
.    匹配. 字符
\/    匹配 / 字符
\    匹配 \ 字符
\[    匹配 [ 字符
\]    匹配 ] 字符
 

表示数量的元字符

元字符    说明
*    匹配0-任意个
\+    匹配1-任意个
\?    匹配0-1个
\{n,m}    匹配n-m个
\{n}    匹配n个
\{n,}    匹配n-任意个
\{,m}    匹配0-m个
 

表示位置的元字符

元字符    说明
$    匹配行尾
^    匹配行首
\<    匹配单词词首
\>    匹配单词词尾
 

替换变量

在正则式中以\(和\)括起来的正则表达式,在后面使用的时候可以用\1、\2等变量来访问\(和\)中的内容。

例子

删除行尾空格::%s/\s+$//g
删除行首多余空格:%s/^\s*// 或者 %s/^ *//
删除沒有內容的空行:%s/^$// 或者 g/^$/d
删除包含有空格组成的空行:%s/^\s*$// 或者 g/^\s*$/d
删除以空格或TAB开头到结尾的空行:%s/^[ |\t]*$// 或者 g/^[ |\t]*$/d
把文中的所有字符串“abc……xyz”替换为“xyz……abc”可以有下列写法

:%s/abc\(.*\)xyz/xyz\1abc/g
:%s/\(abc\)\(.*\)\(xyz\)/\3\2\1/g


sed:指定文件进行替换

sed -i "s/from/to/g" 文件名

 

发表评论