在 Vim 中使用 Tab 键自动完成 PHP 函数

说一下如何使用 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-=$VIM/funclist.txt dictionary+=$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(‘.’)[col1] !~ ‘\k’

return "\<TAB>"

else

return "\<C-N>"

endif

endfunction

"Remap the tab key to select action with InsertTabWrapper

inoremap <TAB> <C-R>=InsertTabWrapper()<CR>

 

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

 

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

留下评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据