说明
匹配任意一个字符
匹配方括号中的任意一个字符。可以使用-表示字符范围,
在方括号内开头使用^符号,表示匹配除方括号中字符之外的任意字符。
匹配阿拉伯数字,等同于[0-9]。
匹配阿拉伯数字之外的任意字符,等同于[^0-9]。
匹配十六进制数字,等同于[0-9A-Fa-f]。
匹配十六进制数字,等同于[^0-9A-Fa-f]。
匹配单词字母,等同于[0-9A-Za-z_]。
匹配单词字母之外的任意字符,等同于[^0-9A-Za-z_]。
匹配<TAB>字符。
匹配空白字符,等同于[ \t]。
匹配非空白字符,等同于[^ \t]。
所有的字母字符. 等同于[a-zA-Z]
小写字母 [a-z]
非小写字母 [^a-z]
大写字母 [A-Z]
非大写字母 [^A-Z]
说明
匹配0-任意个
匹配1-任意个
匹配0-1个
匹配n-m个
匹配n个
匹配n-任意个
匹配0-m个
匹配包含换行在内的所有字符
表示前一个字符可出现零次或多次,但在整个正则表达式可以匹配成功的前提下,匹配的字符数越少越好
匹配一个可有可无的项
匹配空格或断行
说明
* 字符。
. 字符。
/ 字符。
\ 字符。
[ 字符。
说明
匹配行尾
匹配行首
匹配单词词首
匹配单词词尾
\( 和 \) 符号括起正规表达式,即可在后面使用\1、\2等变量来访问 \( 和 \) 中的内容。
与\{n,m}一样,尽可能少次数地重复
匹配它前面的项一次或0次, 尽可能地少
submatch(1)、submatch(2) 等来引用 \1、\2 等的内容,而submatch(0)可以引用匹配的整个内容。
?
Perl语法 含义
+ 1-任意个
? 0-1个
{n,m} n-m个
(和) 分组
“*”。“*”代表对前面的字符(此处为“\s”)匹配零次或多次(越多越好;使用“\*”表示单纯的“*”字符),“\n”代表换行符,“\r”代表回车符,“\(”和“\)”对表达式进行分组,使其被视作一个不可分割的整体。因此,这个表达式的完整意义是,把连续的换行符(包含换行符前面可能有的连续空白字符)替换成为一个单个的换行符。唯一很特殊的地方是,在模式中使用的是“\n”,而被替换的内容中却不能使用“\n”,而只能使用“\r”。原因是历史造成的,详情如果有兴趣的话可以查看“:help NL-used-for-Nul”。
s*//.*!!”。首先可以注意到,这儿分隔符改用了“!”,原因是在模式或字符串部分使用了“/”字符,不换用其他分隔符的话就得在每次使用“/”字符本身时写成“\/”,上面的命令得写成“:%s/\s*\/\/.*//”,可读性较低。命令本身倒是相当简单,用过正则表达式的人估计都知道“.”匹配表示除换行符之外的任何字符吧。
*/”注释:“:%s!\s*/\*\_.\{-}\*/\s*! !g”。这个略有点复杂了,用到了几个不太常用的 Vim 正则表达式特性。“\_.”匹配包含换行在内的所有字符;“\{-}”表示前一个字符可出现零次或多次,但在整个正则表达式可以匹配成功的前提下,匹配的字符数越少越好;标志“g”表示一行里可以匹配和替换多次。替换的结果是个空格的目的是保证像“int/* space not necessary around comments */main()”这样的表达式在替换之后仍然是合法的。
data1 data2 修改为 data2 data1
\(\w\+\)/\2 \1/ 将
Doe, John 修改为 John Doe
id 字符串替换为行号
.".". submatch(1)
word
:/OB/+1,$!sort
vim使用疑问解答:
Q:vim如何支持ftp操作:
A:打开 :e ftp://192.168.10.76/abc.txt
保存(如果不存在则创建) :w ftp://192.168.10.76/abc.txt
读取 :r ftp://192.168.10.76/abc.txt
以上操作第一次打开时需要输入用户名和密码,以后就不用了,
Q:vi
处理多个文件编辑有什么法子?
A:1) vi
file1 file2 file3...
2) 假设你正在编辑 file1,那么用 :args <CTRL-R>;% file2 file3
Q:如何删除连续两行之间的回车符,使连续的两行成为一行?
A:Jx
Q:怎么将一定段落中的某个词替换成另一个词啊?
A:替换用
s/abc/def/ 这样,就可以把 abc 换成 def
一个简便的方法是,先在 visual 模式下想办法选中你要操作的范围,然后再输入 s 命令就可以替换了。
比如你要操作一个段落,可以先用 { 或者 [[ 挪到段落的开始处,然后再用 v 进入 visual 模式,
然后再用 } 或者 ]] 挪到段落的结尾处,然后再输入 s 命令就可以实现你的目的了
Q:vim中光标在C函数和系统调用上时,按K进入man手册页,可是如果应用程序也有这个名字,比方说readlink,按下K就进入那个应用程序的man页了,
如果我想取得在shell中man 2 readlink这样的效果,该怎么办
A:先按下2,然后shift+k,就进入系统调用man页了
Q:在vi中,怎么选中指定的几行,然后进行规整格式之类的命令?比如用V可以进入虚拟模式,然后上下就可以选中几行,然后用=规整格式。如果我想选中的行比较多,有没有比较好的办法呢?
A:V
打开"可视模式"(不是虚拟模式,虚拟是 virtual)后,可以有很多种办法移动光标的,不一定非得用 h j k l , 比如可以搜索定位, 也可以用 [[ ]] ][ [] } { 等段落定位的命令.
v]] v[[ v} 这样就可以选中一大块,而不用一行一行地选,还有 H L 这些都可以用. 详细请 help motion
另外, vim 内置了很多以 a 打头的文本对象, 如 a{ 表示一个 {} 块, ap 表示一个段落等等。=a{ 就可以重排当前语法块.
Q:=a{命令重排后,是按2个TAB键进行缩进的?想让它按一个TAB键缩进,该如果处理?谢谢! 在Visual状态下,如何选择整个文件?
A:全选的命令是
ggVG gg表示到第一行第一个字母, V进入visual line G则到文件尾。
至于=a{重排,应该跟shiftwidth、softtabstop、tabstop、expandtab等设置有关。具体看你是怎么设置的。
我的是把TAB全部设置成4个空格了。
set tabstop=4
set softtabstop=4
set shiftwidth=4
set expandtab
set cindent
set ai
Q:从win2k
telnet到rh7.3使用vim编辑C文件时候,如何处理Ctrl+]呢?
A:vt100
不支持。用 ansi 终端,或者干脆改用 NetTerm 等软件,.
Q:vim支持语法高亮度显示,那么vim是否支持将语法高亮度显示的结果保存为一个html文档呢?
A::TOhtml
Q:vim如何把
“调用外部程序得到的输出” 转移到它自己一个新型的窗口里?比如我调用:!objdump -S %:p:r<cr>;怎样让VIM产生一个新的BUFFER或者窗口,捕获它的输出?
A::split
+enew | r !ls
split :分割窗口 split {+cmd} 表示打开一个新窗口,并在新窗口中执行 {cmd} 命令
split +enew 就是打开一个新窗口,并且在其中执行 enew 这个命令
enew 打开一个新的无名buffer | 命令分割符 r read !ls 执行外部命令
Q:在vim中如何
进行块复制 删除 等 块操作
A::v进入可视模式,hjkl选中要选中的块。y:复制、d:删除/剪切、p:粘贴
v: visual mode//和普通的选择没区别
V: visual line mode//在此模式下,选择的基本单位是行,即:要么就选一行,要么就什么都不选
Ctrl-V: visual block mode//此模式下,可以选择一个块。
Q:能不能读入(解析)一个html文件呢?就是去掉html的的标记,象浏览器一样读入html??
A:vim
是个文本编辑器,不是 html 浏览器。 去掉标记 :%s/<[^>;]*>;//g
Q:写C的时候,如果要把一段注释掉,有什么方法?
A::vmap
<F2>; :s/^/\/\//<CR>; 选中内容,按 F2。
Q:缩写
A::ab
cu chinaunix 以后就可以自己写cu(空格 or 回车 or tab后)vi自动把cu替换成chinaunix
Q:在vi中,如果我不小心按错了键,跑到文件头或者文件尾了,怎么能快速回到刚才光标所在的位置?
A:vi
中不知道。 vim 中可以用 Ctrl+o(欧) 回来。
Q:如果我键入if,再回车,下一行就自动缩进,直到输入endif再和if对齐,vi中不知道怎么实现这个功能
A::set
ai的命令来启动自动缩进。用:syntax on命令来启动语法着色。一般都是写在.exrc中每次自动执行的
Q:用什么快捷键可以在"插入模式"下删除光标到行尾的字符
A:^od$
^o 表示同时按住 Ctrl 和 O 键。
Q:set
autoindent 与 set cindent 区别
A:autoindent
就是自动缩进的意思,当你在输入状态用回车键插入一个新行,或者在 normal 状态用 o 或者 O 插入一个新行时,autoindent 会自动地将当前行的缩进拷贝到新行,也就是上面这位网友说的“自动对齐”,当然了,如果你在新行没有输入任何字符,那么这个缩进将自动删除。
cindent 就不同了,它会按照 C 语言的语法,自动地调整缩进的长度,比如,当你输入了半条语句然后回车时,缩进会自动增加一个 TABSTOP 值,当你键入了一个右花括号时,会自动减少一个 TABSTOP 值。
Q:如何比较快速简单地用一段文字替换文章中的多处不同文字
如:用“为人民服务”来代替
A::%s/TNND\|TMD\|XXX\|FUCK/为人民服务
Q:用vi怎么copy一行,到另外的一个vi打开的文件中
A:Step1
yy Step2 :vi file2 Step3 p
Q:怎么实现vim内,打一个括号如
"("自动补全另一个括号
A::iab
( ()
Q:如何删除所有的偶数行?
A:<ESC>;ggqajddq10000@a 假设你的文本有不到
20000 行,那么输入以上的命令就可以删除所有的偶数行。
Q:隔两行插入一个空行:
A:ggqajo<ESC>;jq1000@a
Q::set
tabstop=4 按tab缩进4了..可是退出vi再进 还是8啊..怎么办?
A:你可以在用户目录下建文本.exrc,在里面写上set
ts=4就可,下次进入时按tab就只有4格了
Q:怎么在vi里面更方便的删除一段内容?
A:首先在你需要考贝头,mark为ma,然后下移或上移到考贝尾,在命令模式输入 d'a
或者在ex模式输入:.,'ad<CR>;
Q:请问vim有配制文件吗?有的话放在哪里
A:根据你的系统类型及配置情况的不同,vim
配置文件的路径也会不同,所以具体请参照 :help vimrc
Q:怎样让
vim 在打开不同文件的时候在开头写入不同的内容。 例如在打开一个后缀名为 cpp 的空文件的时候写入
#include <iostream>;
using namespace std;
A:[code]
autocmd BufNewFile *.cpp exec append(0,"#include <iostream>;") | exec append(1,"using namespace std;") | exec ':$' [/code]
Q:如何实现一下删除多行,或是整个文件中的所有行
A::%d
ggdG
Q:源代码比较混乱,有没有办法格式化呢?
A:gg=G
Q:使用:args可以查看你正在编辑哪个文件,但是我在C语言环境下,使用Ctrl-]跳转到函数定义地方以后,怎么知道我现在位于哪个文件呢?
A:Ctrl+g