這兩天一直糾結兩款編輯器——eclipse和sublime Text。
eclipse的php插件不支援塊注釋收縮狀态下的格式化
eclipse的php插件功能的格式化代碼功能如果雞肋,無法配置PHP格式化模闆。而且不支援代碼注釋在收縮的情況下的格式化功能,這是本人花了幾個小時的嘗試下,無意間的收獲經驗。一開始我以為是eclipse的版本問題,換了好幾個版本,同時也更換php插件,都無法解決,因為我是格式化我本來項目中的一個檔案,而那個檔案就有大量的塊注釋。一按快捷鍵ctrl+shift+F就會出現假死現象,花了幾個小時都無法解決問題,後來嘗試寫一個簡單的PHP代碼,卻可以格式化代碼了,最終将注釋塊全部展開,這時也可以格式化PHP代碼了。o~上帝,然而無法同java一樣,PHP插件中無法配置PHP格式化模闆,這讓我不太滿意。當然,這些都不是大問題,問題是,前幾天我認識了sublime text 這款軟體,功能非常強大。但是....
sublime text的缺點
用了sublime text,總體感覺很棒。隻是以下幾個内容不太滿足要求:
1、不支援outline大綱
2、函數追蹤功能效果不好。而且操作不習慣。我安裝的是CTags,配置快捷鍵,按兩下F1進行函數追蹤,按一下F1,再按一下F2退回。如果能Ctrl+滑鼠左鍵來實作這個功能的話,将會習慣很多。也比較友善。
其實PHP格式化功能,可以通過edit->line->Reindent 重縮進功能進行處理。效果也挺不錯。但無意在網上看到了這樣一款插件:PhpBeautifier ,經過幾個小時的研究,最終在sublime text 下成功通過PhpBeautifier插件實作PHP代碼格式,效果不錯,在此記錄一下昨晚解決事情的經曆并分享實作PhpBeautifier格式化PHP代碼的方法。
修正上面第二點:函數追蹤功能 2012-11-11光棍節22:28記錄
——sublime text可以實作ctrl+滑鼠左鍵來進行函數追蹤
可能是我的ctags.exe版本原故,導緻無法通過ctrl+滑鼠左鍵來進行函數追蹤效果。今天在“CTags的官方網站”下載下傳了最新版的ctags.exe,放到我的sublime text目錄下。注意,要在環境變量增加你的ctags.exe的路徑。比如我的路徑為:C:\Sublime Text 2.0\ctags.exe,那麼我在環境變量path中增加:C:\Sublime Text 2.0,如下圖所示:
重建索引後,盡然可以使用鍵盤按鍵與滑鼠結合來進行函數追蹤功能了,但是要按ctrl+shift後,在按滑鼠左鍵進行函數追蹤。可我想直接按ctrl與滑鼠左鍵。通過進一步摸索,發現增加了mouse選項,如下圖所示:
于是在Mouse Bindings-user中複制Mouse Bindings-Default的代碼,并去掉shift,實作了ctrl+滑鼠左鍵進行函數追蹤功能。同時,定位到目标檔案後,按下ctrl+滑鼠右鍵會傳回到原檔案中。非常友善。
2012-11-12 記:似乎不是ctag.exe版本問題。在公司電腦中,ctags.exe仍是以前版本。但是Preferences->Package Settings->CTags->也出現了Mouse Bindings -Default和Mouse Bindings-User這兩項。奇怪,為什麼以前沒有這兩項呢?還是我以前沒注意?
實作sublime text 支援 PhpBeautifier經曆
一、失敗
看到PhpBeautifier的介紹,心動不已,立即在sublime text中進行安裝,安裝後無法使用,根據習慣檢查一下 Preferences->package setting中插件内容,并未出現PhpBeautifier;輸入ctrl+shift+p,輸入format ,顯示 format php,執行,無任何效果。為什麼會在sublime text中安裝的插件不成功?為這問題折騰了一個多小時,仍未解決。
二、失敗
百度,無任何資料。google,找到了這樣一篇資料:
在 Sublime Text 裡的格式化 PHP 代碼
由於某些原因,需要處理一堆比較舊的PHP代碼,
而且編程風格也不統一,是以需要先統一後再處理會比較友善.
不過於由 Pear 的東西有點參差不齊.是以整合到 Editor 內的過程也不太順利.
來記錄一下.
# 更新已有的 Pear 套件
# 之後安裝 PHP_Beautifier
# 再列出使用方法
cd /Applications/XAMPP/xamppfiles/bin
sudo ./pear update-channels
sudo ./pear upgrade-all
sudo ./pear install --alldeps PHP_Beautifier-0.1.15
./php_beautifier --help
# 修正出現 Cannot redeclare class Config 錯誤
# 切進 PHP_Beautifier 的 Filter 目錄
cd /Applications/XAMPP/xamppfiles/lib/php/pear/PHP/Beautifier/Filter
# 打開下面兩個檔案
- Pear.filter.php
- phpBB.filter.php
# 注解掉下句這句
require_once ('PEAR/Config.php');
# 安裝 Sublime Text 2 的 PhpBeautifier 套件
cd ~/Library/Application\ Support/Sublime\ Text\ 2/Packages/
git clone https://github.com/SublimeText/PhpBeautifier.git PhpBeautifier
cd PhpBeautifier/
vim php_beautifier.py
indent = "-t"
cmd = "/Applications/XAMPP/xamppfiles/bin/php_beautifier"
# 最後在需要美化/格式化的代碼編輯界面裡就可以格式化了
Open File > Command+Shift+P > Format PHP > Enter
這如同在我絕望 中給了我動力。按上面要求更改插件PhpBeautifier目錄下的php_beautifier.py,測試失敗。又折騰了好長時間。都無法格式化PHP代碼。
三、失敗
繼續google,沒找到這方面相關資料。已經晚上11點了,從8點多開始,都搞了快3個小時。絕望、崩潰、淚流滿面....
四、phpCodeBeautifier批量php程式代碼美化工具
終于又讓希望恢複了點,找到了上面這款工具——phpCB.exe,根據參數來對PHP檔案進行格式化。
進行測試,可以對指定目錄下的PHP檔案格式化,效果不錯。缺點是需要在指令行下使用非常長的指令參數來美化程式,一次隻能美化一個PHP檔案。
即使如此,我又把目标放到sublime text上,我感覺,還是可以實作的,是不是我在哪地方有了疏漏。
五、重大發現
我在次轉向上面那篇文章。由于着急,隻顧着修改php_beautifier.py的檔案,而忽視了一個重要内容。安裝perl!在sublime text 中安裝PhpBeautifier插件的确需要安裝perl,請參考:
https://github.com/SublimeText/PhpBeautifier#readme
相關内容如下:
Installation
Install php-pear and php-cli with your package manager :
•php-pear & php5-cli with Debian
•php-pear & php with Archlinux
Install php beautifier from pear channel : sudo pear install --alldeps channel://pear.php.net/php_beautifier-0.1.15
Clone or download the files and copy them to your Packages folder. You can access it via Preferences -> Browse Packages in sublime text
六、失敗
安裝perl這一問題,也是困難重重。不是安裝 ActivePerl for Windows 的版本。網上一些安裝辦法現在也無法适用。具體安裝請看下面連結中的文章。
安裝參考:http://wangye.org/blog/archives/266/
昨晚也不管什麼目錄配置了,一路回車,安裝OK——這樣安裝的是在預設目錄下,我的目錄為 d:\php\php5,是以今天在虛拟機重制安裝時,我想便于管理,我想安裝到d:\php的perl目錄下。但是在配置那個菜單,選擇1,配置基本目錄時,确發現問題:
在cmd指令中輸入:
d:\php\php5> php go-pear.phar
出現:
Are you installing a system-wide PEAR or a local copy?
(system|local) [system] :
直接回車,出現以下菜單:
如果選擇1,更改目錄,則會出現錯誤。錯誤如下所示:
隻有重新輸入指令:
d:\php\php5> php go-pear.phar
出現:
Are you installing a system-wide PEAR or a local copy?
(system|local) [system] :
回車後出現:
1-12,'all' or Enter to continue:時,直接回車安裝到預設目錄,或者輸入“all”來配置目錄。
安裝perl成功後,要在d:\php\php5 目錄下找到 PEAR_ENV.reg檔案,執行導入即可。
收藏1:http://www.cnblogs.com/heiing/archive/2011/12/07/2279405.html
收藏2:http://www.cnblogs.com/heiing/archive/2012/09/07/2674807.html
解決sublime text使用PhpBeautifier插件的問題
終于接近尾聲了,perl安裝成功。現在安裝PHP_Beautifier,即然上面是通過perl安裝的。那我在這也通過perl安裝吧。
根據http://pear.php.net/package/PHP_Beautifier/download 上面提供的安裝方法,在指令中輸入:
pear install PHP_Beautifier-0.1.15
安裝失敗。通過上面文章中介紹的指令:pear install --alldeps PHP_Beautifier-0.1.15,安裝失敗。如下圖所示:
這中間又google,找不到任何有價值的資料。沒辦法,隻有自己研究一下了。根據錯誤,找到檔案,發現錯誤的一行有個fsockopen函數,如下圖所示:
直覺告訴我,也許是我的PHP環境限制了該函數。找到php.ini,找到:disable_functions = escapeshellcmd,escapeshellarg,fsockopen ,果然如此,去掉fsockopen,重新開機apache,通過官網提供的指令,安裝成功。
安裝sublime text的PhpBeautifier插件
通過sublime text的package控制器直接安裝 或者在https://github.com/SublimeText/PhpBeautifier 下載下傳PhpBeautifier,解壓到sublime text/data/package目錄下
下面以我安裝的路徑d:\php\php5為例
# 修正出現 Cannot redeclare class Config 錯誤
# 切進 PHP_Beautifier 的 Filter 目錄
cd /Applications/XAMPP/xamppfiles/lib/php/pear/PHP/Beautifier/Filter
# 打開下面兩個檔案
- Pear.filter.php
- phpBB.filter.php
# 注解掉下句這句
require_once ('PEAR/Config.php');
這個檔案路徑是在:d:\php\php5/pear/PHP/Beautifier/Filter 目錄,根據上面要求修改
修改php_beautifier.py檔案也費了一點時間,主要是下面這句
cmd = "/Applications/XAMPP/xamppfiles/bin/php_beautifier"
浪費一些時間後,靜心研究這個目錄。根據這個目錄的規律,應該是在我的d:\php\php5這個目錄下。是以我改的内容如下:
cmd = 'D:\\php\\PHP5\\php_beautifier'
但是仍無法格式化PHP檔案。
檢視一下D:\php\php5這個目錄下的php_beautifier是什麼東東,進去看了才知道,原來是個批處理檔案:php_beautifier.bat。于是我将内容改為:
cmd = 'D:\\php\\PHP5\\php_beautifier.bat'
奇迹出現了。終于可以通過phpbeautifier插件內建到sublime text中用來格式化PHP代碼。
資源下載下傳
本資源包括
1、go-pear.phar
2、sublime text 2插件
3、指令行格式化工具及執行個體
下載下傳位址:http://download.csdn.net/detail/zm2714/4652014
總結
早就聽說過perl的大名,但是從未接觸過并學習perl的相關知識。這次由于将phpbeautifier插件內建到sublime text中,對perl也有了進一步了解。對于PHP開發人員,了解、掌握并熟練運用perl的子產品解決問題,也是非常有必要的。對于我本人,掌握php、python、我想還需要掌握perl了。我将簡稱為3P吧。
本篇内容可能有點疏漏,由于是昨晚實踐的結果,今天表述上可能有些偏誤。我想在以後看此文時,站在使用者角度再來完善本篇内容。本人部落格每篇内容都不是完成後就是那個樣子,在回頭看時,對于那些缺陷、或者有更好的解決方案、更好的描述或表達時,我都會時時更新。一起進步吧~