VIM学习笔记 自动补全详解(Auto-Completion Detail)

插入模式下,利用自动补全(Insertion-Completion)功能,vim能够根据正在输入的字符,查找匹配的关键字并显示在弹出菜单(popup menu)中。通过选择匹配项,可以补全输入的部分关键字甚至整行文本。

Vim可以针对整行文字、关键字、字典、词典、标签、文件名、宏、命令和拼写等等进行补全。上节介绍了进入补全模式的操作方法;本节将详细介绍各种补全方式的特点。

整行补全(Whole line completion)

使用Ctrl-X Ctrl-L快捷键,将在'complet'选项定义的范围内查找匹配的行。假设在编辑网页文档时输入“<h”,然后调用整行匹配,将会显示所有以“h”开头的HTML标签。

当前文件内关键字补全(Keyword local completion)

使用Ctrl-X Ctrl-NCtrl-X Ctrl-P快捷键,将在当前文件中查找匹配的关键字。

此处的关键字,是指由'iskeyword'选项定义的字符串。默认情况下,iskeyword=@,48-57,_,192-255,认为由数字、字母和下划线组成的字符串为关键词。而句点和短横线,则被是为关键词之间的分隔符。您可以使用set iskeyword命令,来改变关键词的定义。

字典补全(Dictionary completion)

使用Ctrl-X Ctrl-K快捷键,将在'dictionary'选项定义的文件中查找匹配的关键词。

默认情况下'dictionary'选项为空。可以使用:set dictionary命令,来指定字典文件。

对于Linux系统,通常会查找/usr/dict/words或/usr/share/dict/words:

:set dictionary=/usr/dict/words,/usr/share/dict/words

对于Windows系统,如果已经安装了Cygwin,那么可以选择添加words软件包;然后根据您的Cygwin安装目录,来指定字典文件:

set dictionary=D:\cygwin64\usr\share\dict\linux.words

Tools_Cygwin_SelectPackages_dict

你也可以包括其它自定义的字典文件:

:set dictionary+=home/oualline/words

假设我们需要输入单词“acknowledged”,只需要首先输入“ack”三个字母,然后点击Ctrl-X Ctrl-K快捷键即可进行匹配:

AutoCompletion_Dictionary

词典补全(Thesaurus completion)

使用Ctrl-X Ctrl-T快捷键,将在'thesaurus'选项定义的文件中查找匹配的关键词。

默认情况下'thesaurus'选项为空。可以使用:set thesaurus命令,指定字典文件。

首先下载词典文件;然后解压缩后将其中的thesaurus.txt文件复制为~/.vim/thesaurus/english.txt;最后使用以下命令,来指定词典文件:

:set thesaurus=$HOME\vimfiles\thesaurus\english.txt

假设我们输入单词“enjoy”,然后点击Ctrl-X Ctrl-T快捷键,将会在词典文件中查找光标下的单词:

AutoCompletion_Thesaurus

因为在词典文件中,每行会包含多个单词,所以将显示匹配行中的所有单词:

bask enjoy relish savor savour lie

当前文件及其包含的文件关键字补全(Path pattern completion)

使用Ctrl-X Ctrl-I快捷键,将在当前文件以及由'include'选项指定的包含进来的文件中查找匹配的关键词。

很多编程语言都会提供从外部文件中调用代码的功能。比如,C语言的#include语法和Python的import语法等。Vim将根据文件类型所对应的'include'选项,来查找指定包含的文件。您可以使用:set include?命令,查看当前的'include'选项设置。

标签补全(Tag completion)

使用Ctrl-X Ctrl-]快捷键,将在当前文件以及由'include'选项指定的包含进来的文件中查找匹配的标签。

文件名补全(File name completion)

使用Ctrl-X Ctrl-F快捷键,可以匹配并补全文件名。

如果当前光标下的文本不包含任何路径信息,那么将显示当前目录下的文件列表。

如果当前光标下的文本包含任何(绝对或相对)路径信息,那么将显示其指定目录下的文件列表。

如果当前光标下的文本包含唯一的路径信息(比如“~”),那么将自动转换为目录的完整名称。

AutoCompletion_FileName

定义补全(Definition completion)

使用Ctrl-X Ctrl-D快捷键,将在当前文件以及由'include'选项指定的包含进来的文件中,查找由'define'选项定义的宏(definition/macro)。

'define'选项定义的正则表达式默认为“^\s*#\s*define”,将查找以“define”语法定义的宏。您可以使用:set define?命令,查看当前的'define'选项设置。

Vim命令补全(Command-line completion)

使用Ctrl-X Ctrl-V快捷键,将匹配Vim命令,以便在您开发Vim脚本时加速代码录入。

用户自定义补全(User defined completion)

使用Ctrl-X Ctrl-U快捷键,将由'completefunc'选项指定的自定义函数来进行匹配。

拼写建议补全(Spelling completion)

使用Ctrl-X Ctrl-S快捷键,将根据拼写检查给出补全建议。

请注意,为了使用拼写补全,请确保已使用以下命令,打开了拼写检查特性:

:set spell

全能补全(Omni completion)

使用Ctrl-X Ctrl-O快捷键,将由'omnifunc'选项指定的自定义函数来进行匹配。Vim将通过$VIMRUNTIME/autoload/{filetype}complete.vim文件来实现全能补全特性,现在支持8种语言,包括C, (X)HTML with CSS, JavaScript, PHP, Python, Ruby, SQL和XML。

例如首先输入HTML标签的前几个字母“<p cl”,然后按下Ctrl+XCtrl+O键,将根据语法显示匹配菜单:

OmniCompletion_HTML

建议将以下命令,加入vimrc配置文件的:filetype命令之后,以更好地利用全能补全功能:

if has("autocmd") && exists("+omnifunc")
autocmd Filetype *
\ if &omnifunc == "" |
\ setlocal omnifunc=syntaxcomplete#Complete |
\ endif
endif

您可以使用:set omnifunc?命令,查看当前的'omnifunc'选项设置。

补全方式
方式快捷键相关选项帮助信息
整行Ctrl-X Ctrl-L:h compl-whole-line
当前文件内的关键字Ctrl-X Ctrl-N:h compl-current
Ctrl-X Ctrl-P
字典Ctrl-X Ctrl-K'dictionary':h compl-dictionary
词典Ctrl-X Ctrl-T'thesaurus':h i_CTRL-X_CTRL-T
当前文件及其包含的文件Ctrl-X Ctrl-I'include':h compl-keyword
标签(Tag)Ctrl-X Ctrl-]:h compl-tag
文件名Ctrl-X Ctrl-F:h compl-filename
定义或宏Ctrl-X Ctrl-D'define':h compl-define
Vim 命令Ctrl-X Ctrl-V:h compl-vim
用户自定义Ctrl-X Ctrl-U'completefunc':h compl-function
全能 (omni) Ctrl-X Ctrl-O'omnifunc':h compl-omni
拼写建议Ctrl-X Ctrl-S:h compl-spelling
关键字Ctrl-N'complete':h compl-generic
Ctrl-P

Ver: 2.0 | YYQ<上一篇 | 目录 下一篇>