vim自带的补全功能

vi7.0版本自带了自动补全功能omni-completion。
那么Vim是如何找到匹配的单词的呢?在默认的情况下,Vim在查找一个单词时是按照如下的步骤:
1 在当前文件中进行查找
2 在其他窗口中进行查找
3 在其他的已装入的缓冲区中进行查找
4 在没有装入缓冲区的文件中进行查找
5 在当前的标记(tag)列表是进行查找
6 在所有的由当前文件的#include包含进来的文件中进行查找
当然了我们也可以自定义我们的查找顺序.
我们在使用自动完成功能时的命令CTRL-P是向后查找匹配的单词,而还有一个命令CTRL-N是向前查找匹配的单词.他们有同样的功能和作用,所不同的只是查找方向上的不同.
Vim还提供了许多的命令可以使得我们来自定义我们的一些查找上的特征.例如我们可以用下面的命令来告诉Vim在在自动完成的查找过程中忽略大小写的区别:
:set ignorecase
这样以后如果我们输入ins,Vim就会认为是INSERT,Inside或者是instep.当然了前提是在我们所编辑的文本中含有这些词,要不就会找得到了.
为了能够精确的进行查找来自动完成,我们并不希望上面的情况出现,我们可以设置一些选项来告诉Vim区分大小写的情况.这时我们要用到下面的命令:
:set infercase
这样以后如果我们再输入ins,与其相匹配的列表就成为了instep,inside,insert.我们可以通过按CTRL-P或是CTRL-N来进行匹配完成.
在大多数情况下,Vim默认的设置可以很好的来完成工作,但是有时我们要定义自己的一些完成的选项,这时我们就要用到complete这个选项了.这个选项的格式如下:
:set complete=key,key,key
而这个命令中可能出现的key值如下:
. 当前文件
b 已被装缓冲区,但是没有在窗口内的文件
d 在当前的文件中定义和由#include包含进来的文件
i 由#include包含进来的文件
k 由dictionary选项定义的文件
kfile 名为{file}的文件
t 标记(tags)文件
u 没有载入的缓冲区
w 在其他窗口中的文件
我们可以使用path选项来告诉Vim如何来查找我们在当前文件中所包含进来的文件.我们还可以指定一个字典,这个选项的格式如下:
:set dictionary=file,file,....
这个选项定义了由命令CTRL-P和CTRL-N进行匹配查找时所要查找的文件.在Linux系统中这个定义文件在/usr/dict/words中,所以如果我们要将这个文件添加进来进行查找的话,我们就要用到下面的命令:
:set dictionary=/usr/dict/words
如果我们要使用一个我们自己的文件也可以这样的来设置
:set dictionary=/home/oualline/words,/usr/doc/words
我们也可以指定一个字典文件和k选项组合使用:
:set dictionary=k/usr/oualline/words
我们也可以多次的使用k这个标记选项:
:set dictionary=k/usr/dict/words,k/usr/share/words
在上面提到的CTRL-P和CTRL-N进行查找匹配时查找的范围比较的宽范,我们当然也可以使用命令进行一些比较严格的查找.这时我们可以使用命令CTRL-X.当我们输入CTRL-X时我们会进入CTRL-X的一个子模式.这时我们可以使用下面的命令进行查找:
CTRL-D 宏定义
CTRL-F 文件名
CTRL-K 字典
CTRL-I 当前文件以及由#include包含进来的文件
CTRL-L 整个行
CTRL-] 标记(tags)
CTRL-P 向前查找,与没有CTRL-X命令时相同
CTRL-N 向后查找,与没有CTRL-X命令时相同
CTRL-X
CTRL-D命令查找宏定义.他也会查找#include文件.当我们执行完这个命令以后就可以使用CTRL-P,CTRL-N来进行匹配查找.
例如我们可以编辑下面的测试文件:
include.h文件中的内容
#define MAX(x,y) ((x)<(y)?(y):(x))
#define MIN(x,y) ((x)<(y)?(x):(y))
int sum(int i1,int i2)
{return (i1+i2);}
main.c文件中的内容:
#include "include.h"
#define MORE "/usr/ucb/more"
这时我们开始编辑main.c文件,如果我们按下CTRL-X我们就会进入CTRL-X的子模式.如果我们要查找一个宏定义,我们可以按下CTRL-D,这时就会在屏幕的底部简单的显示出有多少匹配的选项.这样我们就可以用CTRL-P和CTRL-N来进行自动完成的功能了.而命令CTRL-X 
CTRL-]则是查找下一个标记(tag),标记是一个C函数的定义.我们可以用命令ctags命令来生成一个C函数定义的列表.我们可以这样的来使用这个命令:
$ctags *.c *.h
这样以后我们就可以在插入模式入下用CTRL-X 
CTRL-]命令来进行标记的查找和匹配了.
在默认的情况下,vim编辑器只是简单的显示出标记的名字,我们可以执行下面的命令,这样以后就可以显示出整个标记了:
:set showfulltag
我们可以使用CTRL-X 
CTRL-F命令来匹配文件名.他会在当前的目录下查找文件并会显示出匹配的内容,这时你就可以用CTRL-P和CTRL-N命令来选择你想要的匹配选项了.
到目前为止我们所说还只是对单词进行操作,我们可以用命令CTRL-X 
CTRL-L对一行进行匹配操作,同样的我们也可以用CTRL-N和CTRL-P来进行选项的匹配.我们还可以在输入CTRL-X命令后用CTRL-Y向下滚动文本,而用CTRL-E向上滚动文本.

上一篇 / 下一篇 2005-07-26 11:16:31 / 个人分类:Linux
查看( 31 ) / 评论( 0 ) / 评分( 0 / 0 )
我们在用Vim来处理文件时可以使用Vim的自动完成功能来大大加速我们的工作速度.所谓的自动完成也就是说当我们输入一个单词的一部分以后,按CTRL 
-P,Vim就会自动的来完成剩下的部分.我们在前面的学习过程中曾用:abbreviate命令来简记某一个单词来达到自动完成的目的,而在这里我们将 
看到是一个更加强大的自动完成功能.Vim能非常简单和灵活的来决定要用哪一个单词来自动完成. 
我们在使用Vim这个强大的自动完成功能的同时,还可以自已定义我们的自动完成的特征,而且还可以使用不同类型的自动完成功能.[@more@]我们在用Vim来处理文件时可以使用Vim的自动完成功能来大大加速我们的工作速度.所谓的自动完成也就是说当我们输入一个单词的一部分以后,按CTRL-P,Vim就会自动的来完成剩下的部分.我们在前面的学习过程中曾用:abbreviate命令来简记某一个单词来达到自动完成的目的,而在这里我们将看到是一个更加强大的自动完成功能.Vim能非常简单和灵活的来决定要用哪一个单词来自动完成. 
我们在使用Vim这个强大的自动完成功能的同时,还可以自已定义我们的自动完成的特征,而且还可以使用不同类型的自动完成功能.
如果我们在编写C程序,而我们所谓得到的下面的一个句子:
total=ch_array[0]+ch_array[1]+ch_array[2]
这时我们输入total=ch_array[0]+ch_,然后按下CTRL-P,Vim就会自动的替我们完成其余的部分,这时我们得到将是
total=ch_array[0]+ch_array
由此可以看到我们在处理文件时用这样的方式可以大大的加快我们的处理速度.
那么Vim是如何找到匹配的单词的呢?在默认的情况下,Vim在查找一个单词时是按照如下的步骤:
1 在当前文件中进行查找
2 在其他窗口中进行查找
3 在其他的已装入的缓冲区中进行查找
4 在没有装入缓冲区的文件中进行查找
5 在当前的标记(tag)列表是进行查找
6 在所有的由当前文件的#include包含进来的文件中进行查找
当然了我们也可以自定义我们的查找顺序.
我们在使用自动完成功能时的命令CTRL-P是向后查找匹配的单词,而还有一个命令CTRL-N是向前查找匹配的单词.他们有同样的功能和作用,所不同的只是查找方向上的不同.
Vim还提供了许多的命令可以使得我们来自定义我们的一些查找上的特征.例如我们可以用下面的命令来告诉Vim在在自动完成的查找过程中忽略大小写的区别:
:set ignorecase
这样以后如果我们输入ins,Vim就会认为是INSERT,Inside或者是instep.当然了前提是在我们所编辑的文本中含有这些词,要不就会找得到了.
为了能够精确的进行查找来自动完成,我们并不希望上面的情况出现,我们可以设置一些选项来告诉Vim区分大小写的情况.这时我们要用到下面的命令:
:set infercase
这样以后如果我们再输入ins,与其相匹配的列表就成为了instep,inside,insert.我们可以通过按CTRL-P或是CTRL-N来进行匹配完成.
在大多数情况下,Vim默认的设置可以很好的来完成工作,但是有时我们要定义自己的一些完成的选项,这时我们就要用到complete这个选项了.这个选项的格式如下:
:set complete=key,key,key
而这个命令中可能出现的key值如下:
. 当前文件
b 已被装缓冲区,但是没有在窗口内的文件
d 在当前的文件中定义和由#include包含进来的文件
i 由#include包含进来的文件
k 由dictionary选项定义的文件
kfile 名为{file}的文件
t 标记(tags)文件
u 没有载入的缓冲区
w 在其他窗口中的文件
我们可以使用path选项来告诉Vim如何来查找我们在当前文件中所包含进来的文件.我们还可以指定一个字典,这个选项的格式如下:
:set dictionary=file,file,....
这个选项定义了由命令CTRL-P和CTRL-N进行匹配查找时所要查找的文件.在Linux系统中这个定义文件在/usr/dict/words中,所以如果我们要将这个文件添加进来进行查找的话,我们就要用到下面的命令:
:set dictionary=/usr/dict/words
如果我们要使用一个我们自己的文件也可以这样的来设置
:set dictionary=/home/oualline/words,/usr/doc/words
我们也可以指定一个字典文件和k选项组合使用:
:set dictionary=k/usr/oualline/words
我们也可以多次的使用k这个标记选项:
:set dictionary=k/usr/dict/words,k/usr/share/words
在上面提到的CTRL-P和CTRL-N进行查找匹配时查找的范围比较的宽范,我们当然也可以使用命令进行一些比较严格的查找.这时我们可以使用命令CTRL-X.当我们输入CTRL-X时我们会进入CTRL-X的一个子模式.这时我们可以使用下面的命令进行查找:
CTRL-D 宏定义
CTRL-F 文件名
CTRL-K 字典
CTRL-I 当前文件以及由#include包含进来的文件
CTRL-L 整个行
CTRL-] 标记(tags)
CTRL-P 向前查找,与没有CTRL-X命令时相同
CTRL-N 向后查找,与没有CTRL-X命令时相同
CTRL-X
CTRL-D命令查找宏定义.他也会查找#include文件.当我们执行完这个命令以后就可以使用CTRL-P,CTRL-N来进行匹配查找.
例如我们可以编辑下面的测试文件:
include.h文件中的内容
#define MAX(x,y) ((x)<(y)?(y):(x))
#define MIN(x,y) ((x)<(y)?(x):(y))
int sum(int i1,int i2)
{return (i1+i2);}
main.c文件中的内容:
#include "include.h"
#define MORE "/usr/ucb/more"
这时我们开始编辑main.c文件,如果我们按下CTRL-X我们就会进入CTRL-X的子模式.如果我们要查找一个宏定义,我们可以按下CTRL-D,这时就会在屏幕的底部简单的显示出有多少匹配的选项.这样我们就可以用CTRL-P和CTRL-N来进行自动完成的功能了.而命令CTRL-X 
CTRL-]则是查找下一个标记(tag),标记是一个C函数的定义.我们可以用命令ctags命令来生成一个C函数定义的列表.我们可以这样的来使用这个命令:
$ctags *.c *.h
这样以后我们就可以在插入模式入下用CTRL-X 
CTRL-]命令来进行标记的查找和匹配了.
在默认的情况下,vim编辑器只是简单的显示出标记的名字,我们可以执行下面的命令,这样以后就可以显示出整个标记了:
:set showfulltag
我们可以使用CTRL-X 
CTRL-F命令来匹配文件名.他会在当前的目录下查找文件并会显示出匹配的内容,这时你就可以用CTRL-P和CTRL-N命令来选择你想要的匹配选项了.
到目前为止我们所说还只是对单词进行操作,我们可以用命令CTRL-X 
CTRL-L对一行进行匹配操作,同样的我们也可以用CTRL-N和CTRL-P来进行选项的匹配.我们还可以在输入CTRL-X命令后用CTRL-Y向下滚动文本,而用CTRL-E向上滚动文本.


转自:http://www.cnblogs.com/lidp/archive/2009/05/05/1698025.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
中文名: Hacking Vim 原名: Hacking Vim 别名: A cookbook to get the most out of the latest Vim editor 作者: Kim Schulz资源格式: PDF 版本: 文字版 出版社: Packt Publishing书号: 9781847190932发行时间: 2007年 地区: 美国 语言: 英文 简介: 内容简介: 不知道是谁 说过一句话:说世界上的程序员分为三种,一种是使用VIM的,还有一种使用Emacs的,剩下的都是第三种。由此可见VIM的强大程度,可以说,这是一款非常适合程序员使用的编辑器。VIM的设计哲学是如果你的工作只需要做一次,那没问题,怎么搞都行,如果你的工作是要重复的完成某些工作,则IVIM总可以帮你找到更少的按键方式来实现相同的目标,为此,VIM设计了多种模式,常见的模式包括命令模式,编辑模式,命令模式等,这个也是和其他编辑器一个很不相同的地方,可能有些已经有其他编辑器习惯的人有点不太习惯的地方,但是如果将模式熟悉了就可以发现在不同的模式之间切换是很平常的事情,而且带来的好处是更少的按键和更快的输入。 VIM是VI的优秀后裔,虽然VI的后裔中不仅仅包括VIM,但是VIM是实现对VI的兼容性最好的编辑器,其他的后裔还包括STEVIE, ELvis, NVi, Vile等。除了实现对VI的兼容性外,VIM还扩展了很多的功能,包括语法高亮,代码折迭,脚本扩展等等,Packt Publishing出版社出版的这本书《Hacking VIM》就对VIM使用的一些TIP作了介绍,介绍的内容包括定制篇,移动篇,效率篇,格式篇和脚本篇,希望可以给你在使用VIM的过程中带去一点帮助。 目录: *---注:该版本为英文版,以下仅为中文的提要而已,切勿以为是中文版,特此注明! 提纲 1.引言 2.常用技巧 2.1全局替换 2.2多文件替换 2.3增加多行注释 2.4 ab技巧 2.5分割窗口功能 2.6改变颜色配置 2.7显示和不显示行号 2.8更好的状态行 2.9光标行和光标列 2.10语言拼写检查 2.11键绑定 2.12定位功能 2.13 自动补全 2.14 使用宏 2.15读写文件或命令内容 2.16使用寄存器 2.17折迭 2.18文件比较vimdiff 2.19缩进 2.20使用文件模板 2.21识别中文字体 3. 常用插件 3.1 ctags 3.2 taglist 3.3 A 3.4 NERDtree 3.5 MiniBuffer 3.6 calendar 1.引言 如果你已经使用Vim超过一年半载,对hjkl,i,a,yy,dd,p,u等命令已经滚瓜烂熟,但是还基本没有自己写过.vimrc文件,又觉得需要将使用Vim的程度提到一个新的高度,看《Hacking Vim》这本书最合适不过了。 我给这本书打4分。觉得很不错是因为这本书中提到了许多我原来没有掌握的技巧或命令。没有打5分是因为这其中也夹杂着好些没有多大用处的部分,又有一些部分选材不是很精要。比如说,Vim插件部分,我以为一本好的书应该为读者挑选一些最常见也最有用的插件对作者进行介绍。这部分作者似乎还没有SMTH BBS Vim版的FAQ写得好。 2.常用技巧 下面总结一下我从这本书和其它地方学到的一些常见的设置和技巧(我自认为是中高级的,可是有些读者可能认为某些部分是初级的)。 2.1全局替换 %s/old/new/g 2.2多文件替换 多文件替换,比如要替换所有.c文件中a_value为a_value,可以使用如下方法: vi *.c :argdo %s/a_value/b_value/ge | update 其中update是直接替换覆盖原文件,若需要确认,则可使用 :argdo %s/a_value/b_value/gec | update 2.3增加多行注释 方法一: Ctrl+v; 选定所需行; I; #|//; Esc两次 比如需要增加#或者是//这种注释。Ctrl + v 定位到开始行,然后选定需要的行,然后执行 I 命令,然后输入 # 或 //,然后按 Esc键两次,即可把注释操作应用到所有选定的行,记住选定不能使用v指令,而应该使用Ctrl + v (清除注释请参考上面的方法)(v是按行选定,Ctrl + v 是按照列选定) 方法二: :起始行,终止行s/要替换字符/替换为新字符/g 比如::1,20s/^/\/\//g 2.4 ab技巧 :ab 替代符 原始信息 比如::ab mail [email protected] 2.5分割窗口功能 分割窗口: :split [filename] (水平分割) :vsplit [filename] (垂直分割) :new (打开一个窗口编辑新文件) 窗口跳转: CTRL+W w (循环跳转) CTRL+W (h|j|k|l) (上下左右) 关闭(当前)窗口: :close 关闭所有其它窗口: :only 增减窗口大小 CTRL+W +/- 缓冲区跳转: :bnext (下一缓冲区) :blast (上一缓冲区) 退出所有窗口 :qall 保存所有窗口: :wall 保存并退出所有窗口: :wqall 2.6改变颜色配置 :colorscheme mycolors Vim自带多种配色方案,可以根据需要自己选用。若不知道系统有哪些配色方案,可以在输入:colorscheme(空格)后用Shift+Tab键选择。 2.7显示和不显示行号 显示行号:set nu[mber] 取消显示行号:set nonu 2.8更好的状态行 通过设置statusline可以设置更好的状态行,我选择的设置是: set statusline=%F%m%r%h%w\ [FORMAT=%{&ff;}]\ [ASCII=\.3b]\ [POS=%4l,%3v][%p%%]\ [LEN=%L] 它可以显示当前文件的路径和文件名以及整个文件的长度。 2.9光标行和光标列 :set cursorline (设置光标行) :set cursorcolumn (设置光标列) 其中我觉得光标行更有用些。Vim默认设置,要找到光标所在位置不是很方便。 2.10语言拼写检查 set spell set spelllang=en,de,it 中文需要语言包支持,不过最常用的还是英文检查吧 2.11键绑定 map 对Normal, Insert, Visual和Command-line模式均有效 imap Insert模式有效 cmap Command-line模式有效 nmap Normal模式有效 vmap Visual模式有效 键绑定可以定义一些键的组合为一个快捷键,如: imap <C-s> <ESC>:w<CR>a 2.12定位功能 { 段首 } 段尾 g, 前一修改处 g; 后一修改处 ( 句首 ) 句尾 w 下一单词头 b 前一单词头 % 跳至匹配括号 [[ 和 ][ 向后|前至下一区段开始 [] 和 ]] 向后|前至下一区段结束 [{ 跳至块开始 ]} 跳至块结束 [/ 跳至注释块开始 ]/ 跳至注释块结束 gd (Goto Declaration) 跳至定义处 gD 跳至全局变量定义处 gj 跳至长行下一段 gk 跳至长行上一段 gf (Goto File) 打开文件 ?向前查找 / 向后查找 ?? 重复上一向前查找 // 重复上一向后查找 # 向前查找光标下词(整词匹配) * 向后查找光标下词(整词匹配) g# 向前查找光标下字符串(不必是整词) g* 向后查找光标下字符串(不必是整词) vimgrep /pattern/[j][g] file file2 … fileN 多文件查找 使用标志(mark)定位: 0~9 系统自用 a-z 本文件mark (使用方法: 标志:ma, 调至标志 `a) A-Z 跨文件的mark :marks 查看所有标志 :delmarks 删除标志 2.13 自动补全 Ctrl+p 自动补全单词 Ctrl+n 自动补全单词(向前查找)两者一般感觉不到区别 Ctrl+x Ctrl+k 通过字典补全单词 Ctrl+x Ctrl+t 从同义词典(thesaurus)补全 Ctrl+x Ctrl+f 文件名自动完成(很有用) Ctrl+x Ctrl+l 自动完成整行 Ctrl+x Ctrl+i 从当前和包含文件补全 Ctrl+x Ctrl+o 全能自动补全,需要set omnifunc 说明: 设置字典的方式:在.vimrc中增加以下语句(借用look命令的字典库) set dictionary+=/usr/share/dict/words 即可使用Ctrl+x Ctrl+k功能,很好很强大! 2.14 使用宏 qx (开始录制宏至寄存器x,x可以为任何字母,但是最常见的是q) command1 … q (结束录制) @x (引用宏) @@ (重复上次宏使用) 2.15读写文件或命令内容 :r filename (读入文件内容) :m,nw filename (将m~n行内容写入文件) r!command (插入command命令结果) 2.16使用寄存器 无名寄存器 “” 数字寄存器 “0 “1 … “9 有名寄存器(Named Registers) “a~”z “A~”Z (大写寄存器内容追加,而不是覆盖) 只读寄存器: “% 当前活动缓冲区文件名 “# 前一文件的文件名,替换文件 “. 最后插入的文本 “: 最后命令行运行的命令 黑洞寄存器: “- 进入的永远消失 搜索模式寄存器 “/ 表达式寄存器: “= (使用:输入表达式后ENTER, p粘贴) 2.17折迭 zfa{ 创建折迭 zc 折迭 zo 打开折迭 zM 折迭所有 zR 打开所有折迭 2.18文件比较vimdiff :vimdiff file1 file2 :diffsplit filename 或命令行下 vim –d file1 file2 可进行文件比较 [c 前一差别 ]c 后一差别 2.19缩进 >% 缩进块中内容 <% 反缩进块中内容 >i{ {内部缩进(不包括{}) >a{ {内容缩进(包括{}) <i{ 反缩进 <a{ 反缩进 2.20使用文件模板 :autocmd BufNewFile *.html 0r $VIMHOME/template/html.tpl 可以在创建新的.html文件时读入模板(html.tpl中内容) 2.21识别中文字体 你的Vim在打开中文文件时都是乱码吗?若是这样,在.vimrc中加入以下几行就可以了: set fileencodings=utf-8,gb2312,gbk,gb18030 set termencoding=utf-8 set encoding=prc 3. 常用插件 Vim中的插件有许多,上Vim.org自己查吧,不过我自己使用以下几个,也觉得是用有用的。以下只说明这些插件的用途,具体用法不做详细介绍。有了这些插件,足以形成一个可以与VC媲美的集成开发环境了。 3.1 ctags 实现标签跳转,C/C++/Java编程时很有用。命令行下ctags –R *创立标签,Ctrl+]/Ctrl+O跳转,Ctrl+T返回 3.2 taglist 生成文件纲要,包括函数、关键字等。安装后使用:Tlist 3.3 A 实现头文件跳转。ctags不能查找头文件 3.4 NERDtree 目录浏览功能。可以用o命令打开目录或文件,非常好用 3.5 MiniBuffer 打开多个文件时,生成一个类似标签页的导航菜单,可以用Ctrl+w w命令跳转至该部分并用Tab选择不同文件 3.6 calendar 日历插件 ...

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值