打磨程序員的專屬利器——命令行&界面

工欲善其事,必先利其器,程序員更是如此,若是沒有一套與本身思惟同步的工具,將很是難受而且編碼效率會很是低。html

但十個程序員就有對工具的十種不一樣理解,本人如今冒然將本身的「工具箱」拿出來曬曬。若對你們沒幫助,輕輕飄過便可,若能引發一絲共鳴,便有了價值。python

 分三個專題來進行展現--linux

1. 命令行&界面(本文)c++

2. 快捷鍵git

3. 文本程序員

 

本人95%的時間都在windows上學習、工做,因此絕大部份內部都是和windows相關。shell

1.explorer和命令行窗口相互打開

在explorer中瀏覽到某路徑時,想要打開命令行窗口執行相關命令,這個場景常常會遇到,而通常的作法就是win+R,輸入cmd,而後D:,再cd ...。
在win7下能夠shift+右鍵文件夾空白處,這樣快捷菜單就多了一個"在此處打開命令窗口"項,如圖ubuntu


下面本人將介紹一種DIY方法
在註冊表HKEY_CLASSES_ROOT\Directory\Background\shell 下創建一個子項,命令爲"Q在這裏打開cmd",(開頭的Q能夠用作快捷鍵),再在這個新子項創建一個command子項,而後將其數據設置爲 cmd.exe /s /k pushd "%V",如圖windows


這樣在空白處右鍵後,就會有一個"Q在這裏打開cmd"的菜單項。這裏點擊,或者按Q均可以打開命令行窗口了,而當熟練後,能夠右鍵後馬上按Q,根本不須要去看出現的菜單,如圖api

或者將下面的代碼複製到一個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

 

再寫一個心得--只因此說程序員是懶惰的,是由於把工具實現好以後的程序員是懶惰的,而在實現、打磨工具的過程當中應該持勤奮態度~~

 

未完,待續...

相關文章
相關標籤/搜索