php vim 补全,Vim 不使用 tags 文件补全 PHP 代码
小朋友們大家好,還記得我是誰嗎?對(duì)了!我就是愛折騰 VIM 的 vimer。今天要給大家講一個(gè) Vim 下代碼補(bǔ)全的新故事。
記得前不久,我還給大家介紹過使用 ctags + Vim 來實(shí)現(xiàn)代碼補(bǔ)全和跳轉(zhuǎn)功能的文章。這篇文章介紹的 ctags 算是程序員的好伙伴——生成代碼 tags 的經(jīng)典軟件了,但這個(gè)世界就止于此了嗎?當(dāng)然不是!今天嘗試用了一下 Vim 的另外一個(gè)馬甲——neovim,發(fā)現(xiàn)居然有很多插件是只給 neovim 準(zhǔn)備的,而且有很多都很不錯(cuò)!其中一款叫做 nvim-completion-manager 的插件,用于即時(shí)(as you type)代碼補(bǔ)全。他神奇的地方在于他居然完全不使用 tags 文件,但自動(dòng)補(bǔ)全的效果卻相當(dāng)不錯(cuò)!
看了此插件的介紹,了解到除了利用 neovim 的多線程處理讓代碼即時(shí)補(bǔ)全不會(huì)卡界面之外(其實(shí)新的 Vim8.0 也支持異步處理了),另外他的補(bǔ)全都是通過其他插件后臺(tái)提供補(bǔ)全的數(shù)據(jù)來實(shí)現(xiàn)的。比如結(jié)合補(bǔ)全 PHP 的插件 phpactor。當(dāng)然 nvim-completion-manager 也是支持從 ctags 里獲取代碼信息來補(bǔ)全的。
這里也不得不重點(diǎn)提一下 phpactor 這個(gè)插件,本身這個(gè)插件是個(gè) PHP 寫的命令行工具,提供了 IDE 的某些功能,比如獲取某個(gè)類里的所有方法信息、重構(gòu)某個(gè)類等。功能還是挺強(qiáng)大的,只不過因?yàn)樗胁僮髟诿钚邢聢?zhí)行,相比較 IDE 來說還是不太方便。不過 phpactor 本身也提供 Vim 插件。通過與 Vim 的合體,他可以在 Vim 里面執(zhí)行他所提供的那些 IDE 級(jí)的功能,只不過這個(gè)插件并不提供即時(shí)代碼補(bǔ)全,需要設(shè)置 omnifunc 來喚起選擇框(然而這么做又把本來 PHP 環(huán)境下 omnifunc 的功能覆蓋了……然后就沒有辦法補(bǔ)全 PHP 本身的函數(shù)……真是糾結(jié))。而此插件與 nvim-completion-manager 配合使用則正好彌補(bǔ)了這個(gè)缺點(diǎn)。因?yàn)?phpactor 本身通過 composer + PHP 本身的類反射功能來實(shí)現(xiàn)獲取某個(gè)類下的所有方法,理論上來說比使用 tags 更準(zhǔn)確,因?yàn)楫吘故?PHP 原生的實(shí)現(xiàn)(我現(xiàn)在就遇到使用 tags 不能返回父類的方法,但我覺得應(yīng)該沒這么弱吧可能還需要什么設(shè)置)。
另外 phpactor 也支持通過類名返回類全名(包含命名空間)的功能,可以輕松展開/引入某個(gè)類的命名空間,所以之前一直用的 arnaud-lb/vim-php-namespace 擴(kuò)展也可以刪除了。
聽到這里是不是已經(jīng)想嘗鮮了呢?將以下配置加入到你的 neovim 配置文件里然后運(yùn)行 PlugInstall 命令即可(前提是安裝了 vim-plug 作為 Vim 插件管理工具,并且在 PATH 里安裝了 composer)。
Plug 'roxma/nvim-completion-manager'
Plug 'phpactor/phpactor', {'do': 'composer install'}
Plug 'roxma/ncm-phpactor'
就我目前嘗試的效果還是不錯(cuò)的,但因?yàn)?Vim 本身跟 ctags 就是好基友,很多功能都通過 tags 文件來實(shí)現(xiàn)所以完全不用 tags 的話可能有很多功能還需要重復(fù)實(shí)現(xiàn),有點(diǎn) 2……(比如以前 ctrl + ] 是跳轉(zhuǎn)到定義,沒有 tags 文件就跳轉(zhuǎn)不了了,phpactor 重新實(shí)現(xiàn)了這個(gè)功能,并且還重新設(shè)定了快捷鍵……真是有夠折騰的……)下次我再試試 neocomplete 在 neovim 上的馬甲 deocomplete 看看好不好用。
寫作累,服務(wù)器還越來越貴
求分擔(dān),祝愿好人一生平安
天使打賞人
總結(jié)
以上是生活随笔為你收集整理的php vim 补全,Vim 不使用 tags 文件补全 PHP 代码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js 浅拷贝直接赋值_JS中的赋值、浅拷
- 下一篇: php 截取某个字符,PHP_php截取