vim使用php自动完成功能

jackxiang 2009-2-18 19:08 | |
说一下如何使用 Tab 键自动完成,按照习惯,Tab 键通常是用来缩进行的,如输入 4 个空格 如果要把 Tab 映射为自动完成,可能使用上稍微有点麻烦,下面会讲如何解决这个问题。

首先需要为 Vim 提供一个 PHP 的函数列表文件,这样 Vim 才能知道如何自动完成一个 PHP 函数。 函数列表不需要自己做,PHP 网站上有现成的,拿来用就可以了:

http://cvs.php.net/viewvc.cgi/phpdoc/funclist.txt

得到这个文件,直接拷贝到 Vim 目录中,比如根目录下面,然后在 vimrc 中加入如下代码, 告知 vim 在自动完成时,需要扫描这个文件来分析关键字。


"You can obtain the completion dictionary file from:
"  http://cvs.php.net/viewvc.cgi/phpdoc/funclist.txt
set dictionary-=/etc/vim/funclist.txt dictionary+=/etc/vim/funclist.txt

"Use the dictionary completion
set complete-=k complete+=k

那么如何解决缩进的问题呢?我们肯定不愿意在映射另外一个键来做缩进用,感觉会很别扭。 下面的函数会解决这个问题。


"Auto completion using the TAB key
"This function determines, wether we are on
"the start of the line text(then tab indents)
"or if we want to try auto completion
function! InsertTabWrapper()
    let col=col('.')-1
    if !col || getline('.')[col-1] !~ '\k'
        return "\"
    else
        return "\"
    endif
endfunction

"Remap the tab key to select action with InsertTabWrapper
inoremap =InsertTabWrapper()

这个函数的作用是判断当前光标前的一个字符是否为一个 Keyword 字符(:help iskeyword),vim 中用 \k 表示, 这个字符的范围大约是所有非空白的可打印的字符,但除开某些特殊字符,比如 @ * " 等等。

于是效果就出来了,当前导字符为空白或者 @ * 等字符时,Tab 就映射为 成为缩进键。 否则就映射为 ,也就是 CTRL+N 调用自动完成功能。

大约就是这样...

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:http://jackxiang.com/post/1637/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!

评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]