Chinaunix首页 | 论坛 | 博客
  • 博客访问: 180964
  • 博文数量: 96
  • 博客积分: 4060
  • 博客等级: 上校
  • 技术积分: 1040
  • 用 户 组: 普通用户
  • 注册时间: 2009-02-12 13:13
文章分类

全部博文(96)

文章存档

2011年(3)

2010年(76)

2009年(17)

我的朋友

分类: LINUX

2009-10-09 09:15:08

VIM中常用的替换模式总结。

1,简单替换表达式

替换命令可以在全文中用一个单词替换另一个单词:

:%s/four/4/g

“%” 范围前缀表示在所有行中执行替换。最后的 “g” 标记表示替换行中的所有匹配点。如果仅仅对当前行进行操作,那么只要去掉%即可

   如果你有一个象 “thirtyfour” 这样的单词,上面的命令会出错。这种情况下,这个单词会被替换成”thirty4″。要解决这个问题,用 “\<” 来指定匹配单词开头:

        :%s/\

显然,这样在处理 “fourty” 的时候还是会出错。用 “\>” 来解决这个问题:

        :%s/\/4/g

如果你在编码,你可能只想替换注释中的 “four”,而保留代码中的。由于这很难指定,可以在替换命令中加一个 “c” 标记,这样,Vim 会在每次替换前提示你:

        :%s/\/4/gc

2,删除多余的空格

要删除这些每行后面多余的空格,可以执行如下命令:

        :%s/\s\+$//

命令前面指明范围是 “%”,所以这会作用于整个文件。”substitute” 命令的匹配模式是

“\s\+$”。这表示行末($)前的一个或者多个(\+)空格(\s)。替换命令的 “to” 部分是空的:”//”。这样就会删除那些匹配的空白字符。

3,匹配重复性模式

星号项 “*” 规定在它前面的项可以重复任意次。因此:

        /a*

匹配 “a”,”aa”,”aaa”,等等。但也匹配 “” (空字串),因为零次也包含在内。星号 “*” 仅仅应用于那个紧邻在它前面的项。因此 “ab*” 匹配 “a”,”ab”,”abb”,”abbb”,等等。如要多次重复整个字符串,那么该字符串必须被组成一个项。组成一项的方法就是在它前面加 “\(”,后面加 “\)”。因此这个命令:

        /\(ab\)*

匹配: “ab”,”abab”,”ababab”,等等。而且也匹配 “”。

要避免匹配空字串,使用 “\+”。这表示前面一项可以被匹配一次或多次。

        /ab\+

匹配 “ab”,”abb”,”abbb”,等等。它不匹配 后面没有跟随 “b” 的 “a”。

要匹配一个可选项,用 “\=”。 例如:

        /folders\=

匹配 “folder” 和 “folders”。

4,指定重复次数

要匹配某一项的特定次数重复,使用 “\{n,m}” 这样的形式。其中 “n” 和 “m” 都是数字。在它前面的那个项将被重复 “n” 到 “m” 次 (|inclusive| 包含 “n” 和 “m”)。例如:

        /ab\{3,5}

匹配 “abbb”,”abbbb” 以及 “abbbbb”。

   当 “n” 省略时,被默认为零。当 “m” 省略时,被默认为无限大。当 “,m” 省略时,就表示重复正好 “n” 次。例如:

        模式           匹配次数

        \{,4}            0,1,2,3 或 4

        \{3,}            3,4,5,等等

        \{0,1}           0 或 1,同 \=

        \{0,}            0 或 更多,同 *

        \{1,}            1 或 更多,同 \+

        \{3}             3

5,多选一匹配

在一个查找模式中,”或” 运算符是 “\|”。例如:

        /foo\|bar

这个命令匹配了 “foo” 或 “bar”。更多的抉择可以连在后面:

        /one\|two\|three

匹配 “one”,”two” 或 “three”。

   如要匹配其多次重复,那么整个抉择结构须置于 “\(” 和 “\)” 之间:

        /\(foo\|bar\)\+

这个命令匹配 “foo”,”foobar”,”foofoo”,”barfoobar”,等等。

   再举个例子:

        /end\(if\|while\|for\)

这个命令匹配 “endif”,”endwhile” 和 “endfor”。

此外还有
[[
]]
[]
再加上
][
一共是 4 个在段落(对于 C 来讲就是函数)间跳转的命令。

总结是:
1,相同就跳到函数的开头:(如果都是左括号或者都是右括号),不同就跳到函数的结尾:
     { 和 } 用来跳到函数的开头。
     [] 和 ][ 用来跳到函数的结尾。
2,左右左右,“左”在前面。前后前后,“前”也在前面。因此左括号打头则表示向前,右括号打头则表示向后:
     [[ 和 [] 用来向前跳
     ]] 和 ][ 用来向后跳

结合起来就是:
[[ 用来跳到光标前面的一个函数开始处。如果光标在函数体内的话,那就是所在函数的开始处。
][ 用来跳到光标后面的一个函数结尾处。如果光标在函数体内的话,那就是所在函数的结尾处。
]] 用来跳到光标后面的一个函数开始处。如果光标在函数体内的话,那就是下一个函数的开始处。
[] 用来跳到光标前面的一个函数结尾处。如果光标在函数体内的话,那就是上一个函数的结尾处。 

1.tags
1)安装ctags
2)进入源码根目录,输入命令"ctags -R",会在当前目录下生成tags文件
3)用vim打开文件后,先输入命令"set tags=tags文件的路径",最好写在.vimrc中
4)vim中tag命令的使用
ctrl + ]     跳转函数、宏
ctrl + o     回到跳转前的地方
ctrl + T     跳到标签栈中较早的标签
在命令行中输入"vim -t 函数名"   直接打开文件并跳转函数
:tag 函数名(不分大小写)  跳转函数
:tags 显示跳转标签栈
5)vimrc设置
if has("ctags")
    if filereadable("tags")
        set tags=tags
    endif
endif
2.cscope (创建一个数据库索引,用于查找)
1)安装cscope
2)进入源码根目录,输入命令"cscope -Rbq",会在当前目录下生成cscope.out, cscope.in.out, cscope.po.out三个文件
3)cscope默认情况下不解析c++和java文件,可以把把这些文件的名字和路径保存在cscope.files文件中,当cscope发现在当前目录中存在cscope.files时,就会为cscope.files中列出的所有文件生成索引数据库
cd src
find . -type f > cscope.files
cscope -bq -i cscope.files
4)cscope命令行选项参数
-R: 在生成索引文件时,搜索子目录树中的代码
-b: 只生成索引文件,不进入cscope的界面
-q: 生成cscope.in.out和cscope.po.out文件,加快cscope的索引速度
-k: 在生成索引文件时,不搜索/usr/include目录
-i: 如果保存文件列表的文件名不是cscope.files时,需要加此选项告诉cscope到哪儿去找源文件列表。可以使用"-",表示由标准输入获得文件列表。
-I dir: 在-I选项指出的目录中查找头文件
-u: 扫描所有文件,重新生成交叉索引文件
-C: 在搜索时忽略大小写
-P path: 在以相对路径表示的文件前加上的path,这样,你不用切换到你数据库文件所在的目录也可以使用它了。
5)输入":cscope add 路径/cscope.out",添加cscope数据库
6)vim中":cscope find"命令的选项参数
s: 查找C语言符号,即查找函数名、宏、枚举值等出现的地方
g: 查找函数、宏、枚举等定义的位置,类似ctags所提供的功能
d: 查找本函数调用的函数
c: 查找调用本函数的函数
t: 查找指定的字符串
e: 查找egrep模式,相当于egrep功能,但查找速度快多了
f: 查找并打开文件,类似vim的find功能
i: 查找包含本文件的文件
7)vimrc设置
if has("cscope")
    set csprg=/usr/bin/cscope
    set csto=1
    set cst
    set nocsverb
    if filereadable("cscope.out")
        cs add cscope.out
    endif
    set csverb
endif
3.taglist
1)到处下载taglist
2)在根目录下创建.vim目录,把taglist.zip解压到此目录下
plugin/taglist.vim  taglist插件
doc/taglist.txt     taglist帮助文件
3)vim操作taglsit命令
:Tlist 打开taglsit
:TlistClose 关闭taglist
:TlistToggle 在打开和关闭间切换
(可以在.vimrc中定义一个映射,使用快捷键",tl"来打开或关闭taglist:
let mapleader = ","
map  tl :TlistToogle
)
4).vimrc设置
let Tlist_Ctags_Cmd = '/usr/bin/ctags'  设定linux系统中ctags程序的位置
let Tlist_Show_One_File = 1     不同时显示多个文件的tag,只显示当前文件的
let Tlist_Exit_OnlyWindow = 1   如果taglist窗口是最后一个窗口,则退出vim
let Tlist_Use_Right_Window = 1  在右侧窗口中显示taglist窗口
let Tlist_Sort_Type = "name"    使taglist以tag名字进行排序
let Tlist_Use_SingleClick = 1   单击tag就跳转
let Tlist_Auto_Open = 1         启动vim后自动打开taglist窗口
let Tlist_Close_On_Select = 1   选择了tag后自动关闭taglist窗口
let Tlist_WinHeight = ""        taglist窗口的高度
let Tlist_WinWidth = ""            taglist窗口的宽度
let Tlist_Use_Horiz_Window = 1  taglist窗口横向显示
let Tlist_File_Fold_Auto_Close =1  同时显示多个文件中的tag时使taglist只显示当前文件tag,其它文件的tag都被折叠起来  
let Tlist_GainFocus_On_ToggleOpen = 1  TlistToggle打开taglist窗口时,输入焦点在taglist窗口中
let Tlist_Process_File_Always = 1  taglist始终解析文件中的tag,不管taglist窗口有没有打开
5)taglist命令
          跳到光标下tag所定义的位置,用鼠标双击此tag功能也一样
o             在一个新打开的窗口中显示光标下tag
       显示光标下tag的原型定义
u             更新taglist窗口中的tag
s             更改排序方式,在按名字排序和按出现顺序排序间切换
x             taglist窗口放大和缩小,方便查看较长的tag
+             打开一个折叠,同zo
-             将tag折叠起来,同zc
*             打开所有的折叠,同zR
=             将所有tag折叠起来,同zM
[[            跳到前一个文件
]]            跳到后一个文件
q             关闭taglist窗口
          显示帮助
4.lookupFile (默认使用tags文件查找文件、缓冲区、目录下文件)
1)到处下载
2)解压到.vim目录下
3)lookupFile需要genutils的支持,到处下载,然后也解压在.vim目录下
4)按F5键或输入"ookupFile"打开查找窗口,然后用"ctrl+n"或"ctrl+p"键在列表中选择
5)输入"UBufs"命令可以在缓冲区中查找
6)输入"UWalk"命令输入目录名后会在下拉列表中列出这个目录中的所有子目录及文件供选择
7).vimrc设置
let gookupFile_MinPatLength = 2            最少输入2个字符才开始查找
let gookupFile_PreserveLastPattern = 0     不保存上次查找的字符串
let gookupFile_PreservePatternHistory = 1  保存查找历史
let gookupFile_AlwaysAcceptFirst = 1       回车打开第一个匹配项目
let gookupFile_AllowNewFiles = 0           不允许创建不存在的文件
5.colorscheme (vim顔色)
1)到处下载
2)解压到.vim目录下
3)使用命令"colorscheme .vim/colors/文件名"可以修改vimrc的顔色
4)vimrc设置
colorscheme darkblue
以下是我的vimrc配置文件,仅供参考:
set nu "显示行号
set background=light "设定字体顔色模式,light使字体以较暗的顔色显示出来,适用于亮色系的背景;dark使字体以较亮的顔色显示出来,适用于暗色系的背景
set cindent "编程时c语言自动缩进
set cino=j1 "设定c/c++自动缩进的风格
set fileencodings=utf8,gb18030,big5,gb2312 "支持的字符编码
set formatoptions=rotcql "设置Vim中文本和注释的换行方式
set incsearch "输入查找内容的同时,vim就开始对输入的内容进行匹配,并显示匹配的位置
set hlsearch "对匹配的所有项目进行高亮显示
set ignorecase "在查找时忽略大小写
set nocompatible "去掉有关vi一致性模式,避免以前版本的一些bug和局限
set shiftwidth=4 "反向制表符中的空格数目
set tabstop=4 "指定tab缩进的字符数目
set smarttab "解决shiftwidth和tabstop不等时的麻烦
set wildmenu "自动补全命令时候使用菜单式匹配列表
set mouse=a "使用鼠标
syntax on "开启语法高亮
filetype plugin indent on "打开文件类型检测功能
let mapleader = ","
let g:mapleader = ","
"tags setup
if has("ctags")
    if filereadable("tags")
        set tags=tags
    endif
endif
"Tlist setup
let Tlist_Ctags_Cmd = '/usr/bin/ctags' "设定linux系统中ctags程序的位置
let Tlist_Sort_Type = "name" "使taglist以tag名字进行排序
let Tlist_Show_One_File = 1 "不同时显示多个文件的tag,只显示当前文件的
let Tlist_Exit_OnlyWindow = 1 "如果taglist窗口是最后一个窗口,则退出vim
let Tlist_Use_Right_Window = 1 "在右侧窗口中显示taglist窗口
let Tlist_Use_SingleClick = 1 "单击tag就跳转
let Tlist_WinWidth = 15 "taglist窗口的宽度
map  tl :TlistToogle
"LookupFile setup
let gookupFile_MinPatLength = 2 "最少输入2个字符才开始查找
let gookupFile_PreserveLastPattern = 0 "不保存上次查找的字符串
let g:LookupFile_PreservePatternHistory = 1 "保存查找历史
let g:LookupFile_AlwaysAcceptFirst = 1 "回车打开第一个匹配项目
let g:LookupFile_AllowNewFiles = 0 "不允许创建不存在的文件
"cscope setup
if has("cscope")
    set csprg=/usr/bin/cscope
    set csto=1
    set cst
    set nocsverb
    if filereadable("cscope.out")
        cs add cscope.out
    endif
    set csverb
endif

阅读(550) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~