工欲善其事,必先利其器,程序員更是如此,如果沒有一套與自己思維同步的工具,將非常難受並且編碼效率會非常低。
但十個程序員就有對工具的十種不同理解,本人現在冒然將自己的“工具箱”拿出來曬曬。若對大家沒幫助,輕輕飄過即可,若能引起一絲共鳴,便有了價值。
分三個專題來進行展示--
1. 命令行&界面(本文)
2. 快捷鍵
3. 文本
本人95%的時間都在windows上學習、工作,所以絕大部分內部都是和windows相關。
1.explorer和命令行窗口相互打開
在explorer中瀏覽到某路徑時,想要打開命令行窗口執行相關命令,這個場景經常會遇到,而一般的做法就是win+R,輸入cmd,然后D:,再cd ...。
在win7下可以shift+右鍵文件夾空白處,這樣快捷菜單就多了一個"在此處打開命令窗口"項,如圖
下面本人將介紹一種DIY方法
在注冊表HKEY_CLASSES_ROOT\Directory\Background\shell 下建立一個子項,命令為"Q在這里打開cmd",(開頭的Q可以用做快捷鍵),再在這個新子項建立一個command子項,然后將其數據設置為 cmd.exe /s /k pushd "%V",如圖
這樣在空白處右鍵后,就會有一個"Q在這里打開cmd"的菜單項。這里點擊,或者按Q都可以打開命令行窗口了,而當熟練后,可以右鍵后立刻按Q,根本不需要去看出現的菜單,如圖
或者將下面的代碼復制到一個reg文件中,然后雙擊執行reg文件即可。
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\Directory\Background\shell\QOpencmd\command] ""="cmd.exe /s /k pushd \"%V\""
這里只所以選Q,是因為不會和其它的沖突。win7 shift+右鍵出來的"在此處打開命令窗口"項快捷鍵是W,和"新建"的快捷鍵沖突了,當按W后光標會在這兩項之間跳動,還需要第三次操作--左鍵或者回車。不比DIY方法中的直接右鍵,然后立刻Q,來得快。(關於快捷鍵的精髓操作在后面的章節中再闡述)
在命令行中打開explorer窗口,可以用explorer+路徑,在win shell中是用%cd%來表示當前路徑,所以 explorer %cd% 就可以在explorer中打開命令行的當前窗口
如果嫌這個命令太長了,可以建立一個e.bat文件,其內容為
::在命令行中打開資源瀏覽器窗口 @echo off explorer %cd%
將e.bat文件放在系統路徑,或者專門建立一個文件夾來自己的工具,然后將其添加到系統路徑。
這樣在命令行中僅僅輸入e,然后回車,就可以打開explorer了!! 32個贊!!
受到e.bat的啟發,於是又寫了一個x.bat,其內容為
::直接用x命令來退出控制台窗口 @echo off exit
這樣可以在命令行中直接用x,就可以退出命令行了。
ubuntu中是用插件來實現資源管理器到命令行窗口的打開,而命令行到資源管理器是在.bashrc中建立一個別名 alias e="nautilus $PWD" (ubuntu下的資源管理器叫nautilus)
osX中也是用插件go2shell來實現Finder到終端,而終端到Finder是用open . (. 表示當前路徑)
2.與explorer的左側樹控件的恩怨
本人非常喜歡使用explorer左側的樹控件。可慢慢發現有一個問題,就是這個樹控件中的節點太容易被拖動了,有時瀏覽文件時,不小心拖動了文件夾,文件夾移動了位置,而自己還完全不知。當N天后發現問題時,想要找回文件夾可比登天了。
於是本人就寫了個鈎子程序,可以禁用掉explorer樹控件的拖放功能。這里是下載地址,在win7下測試通過 BanExplorerTreeDrag
而在win7樹節點的展開或者收起,都得雙擊,或者點擊左邊那一個小小小的箭頭,非常的不爽。想要一個只要單擊樹節點,節點就會展開或者收起的樹控件。找了各種設置后,發現無法實現。曾經都有想過自己寫一個類似的Explorer程序的打算,可因為種種原因一直沒有實現,現在也只能忍受這個樹控件了。
3.subst創建一個虛擬盤
subst可以用一個文件夾路徑建立一個虛擬的磁盤。
比如 subst G: d:\notedata2 就可以新建一個G:磁盤,並且其內容就是 d:\notedata2 文件夾的內容。(當然G:這個名稱不能先被占用)
如果有哪個文件夾需要經常訪問,可以用這種方式將其映射成磁盤,然后不管是在Explorer中還是在命令行中都可以比較方便地訪問。命令行中可以直接用G:\來定位,而不需要用原來比較長的路徑了。(win7的"庫功能"也可以將特定的文件夾放在好找到的位置,不過在命令行中還是不方便)
有一個問題是windows重啟后這個映射就需要重新建立,不過可以寫一個批處理文件開機執行即可。
4.svn,git的自動提交
svn要update/Commit時都得在Explorer中找到文件夾路徑,然后右鍵,再找到Update或者Commit菜單項,如果有多個路徑要操作,簡直是太繁瑣了,並且還容易漏掉。這里介紹和批處理文件來簡化操作。
**svn**
將TortoiseSVN安裝目錄中的bin文件夾添加到系統路徑,這樣就可以用svn.exe命令,輸入svn help,可以發現用svn update path, svn commit path來代替菜單點擊(path是項目路徑)。然后可以在桌面建立兩個bat文件,內容分別是
svn update path
svn commit path
這樣直接點擊這個兩個文件就可以實現svn的update/commit操作了。
如果有多個路徑都需要update/commit操作,可以在批處理文件同目錄下建立file.txt文件,將要提交的文件或文件夾路徑都列在file.txt文件中,如圖
然后在批處理文件中用下面的代碼可以循環訪問到文件中的每一列
@echo off for /f %%i in (file.txt) do ( echo %%i )
pause
如果是svn的update/commit操作,只要將echo %%i, 換成 svn commit %%i 或者 svn update %%i 即可。file.txt中的文件名得使用短路徑,也就是不包括空格的路徑,如果有空格就得在%%i加上引號。用win32api的 GetShortPathName() 可以獲取短路徑,本人用.Net實現了一個非常簡陋的程序shortName,可以將長路徑轉化為短路徑。
**git**
同時將git安裝目錄中的bin文件夾添加到系統路徑,添加建立pull.bat文件,內容為
git pull
pause
push.bat文件,內容為
git add . git commit -a git push pause
然后直接點擊文件就可以實現git的pull/push操作了。當然pull.bat, push.bat都得放在項目路徑下,如果是要操作其它的路徑就先得cd 到其路徑下。
小結: 盡量用命令來替代界面操作,上面也寫了一小段windows的批處理代碼,這里不建議深入學習windows shell,也不建議深入學習linux shell,而應該學跨平台的腳本,比如python, ruby,或者perl。這部分在后面的“文本”一節中再詳細說明。
5.Beep, Sleep, OpenInExplorer.exe, FileSize.exe
本人用c++還實現了一些小小的命令行工具。比如
Beep.exe 在命令行中發出Beep聲音,實現就是調用win32API的::MessageBeep()函數
Sleep.exe 讓命令行進程睡眠指定的時間,就是調用::Sleep()函數
OpenInExplorer.exe 打開explorer,並且定位到指定的文件或文件夾,其實用的ShlObj中的SHOpenFolderAndSelectItems()函數
FileSize.exe 輸出指定文件的大小,單位是字節。
下載鏈接:simple_tools
上面這些功能或許windows自身已有提供,不過本人懶得去找,就順手自己實現了,反正也不復雜。 實現這些工具也是受了Unix哲學的影響。
還有一些亂七八糟的批處理,請參見 http://www.cnblogs.com/xiangism/archive/2012/11/26/2789606.html
再寫一個心得--只所以說程序員是懶惰的,是因為把工具實現好之后的程序員是懶惰的,而在實現、打磨工具的過程中應該持勤奮態度~~
未完,待續...