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