前言
平時開發中遇到這樣那樣的命令需要記下來,一般做法是這樣。
- 新建記事本
- 將需要記下的關鍵命令儲存。
- 每次需要使用時,貼上複製即可。
好像沒什麼毛病!直到遇到了 Cmder。。。
當看到同事分析問題時在 Cmder 裡命令快捷鍵刷刷一頓操作,覺得挺厲害滴。感覺這同事技術好牛,快捷鍵用這麼好。後來才知道是 Cmder 用的溜,給人感覺很厲害。從某種意義上說,Cmder 簡直是技術人裝逼必備神器。
本文不打算講解 Cmder 的安裝和配置過程。可自行查閱,不清楚也可留言。這裡重點說說 Cmder 最吸引功能: 自定義命令別名
講解自定義命令別名之前,先簡單介紹下 Cmder。
什麼是 Cmder
一句話概括:作者出於 windows 上好的命令列終端太少而建立的 Cmder。
Cmder 是 windows 上一款命令列終端工具。
Cmder 特色:
- 可設定命令別名
- 豐富的顏色主題(Solarized、Twilight、Ubuntu、xterm、Monokai,甚至接受自定)、可定製字型
- 支援 tab 分頁、同屏多埠(支援水平分割、垂直分割)
- 支援自定 terminal,無論是 CMD、PowerShell、bash 都可以,還可以注入環境變數
- 整合了 git
- 完全便攜可透過 U 盤或者雲端攜帶。保持你的設定別名和歷史記錄,再也不會看醜陋的 windows 提示符了。
Cmder 特色總結:設定命令別名,配置好看主題,支援多開,自定義終端環境,整合 git 和方便攜帶。
自定義命令別名
別名定義
很長的命令可以用很簡單幾個字母表示。如下,只要在 Cmder 中敲 gl 就可代替後面一連串命令。
gl=git log --oneline --all --graph --decorate $*
命令範圍
也許大多數人概念中,既然 Cmder 是 windows 平臺工具,那麼支援命令當然是 windows 平臺相關命令。
其實 Cmder 可表示命令範圍很廣,任何新增到系統環境變數中的工具,其相關命令都可執行。
如下圖中,windows 系統環境變數中配置了 svn 和 jdk 。則 java 和 svn 相關命令預設都可以在 Cmder 命令列中可執行。
若目標工具未配置在系統環境變數中則不能直接在 Cmder 中預設使用,需在 Cmder 中手動轉到相關目錄下執行。
一般開發類軟體比如 python、java、git 環境配置時都需要新增到系統環境變數中。
如何新增別名
步驟一: Cmder 安裝目錄下開啟此檔案
步驟二:按如下格式新增 ① 表示自定義別名 ② 表示需配置的原始命令。
步驟三:儲存修改,關閉 Cmder 客戶端後再開啟即可生效自定義別名命令。
效果展示
Git 場景
列舉兩個相關場景
一次性提交給多人評審程式碼
gpushr = git push origin HEAD:refs/for/master%r=alice@example.com,r=bob@example.com
這樣在 Cmder 中直接敲 gpushr 就行了,當然這個 gpushr 是我自己取的,您可以選擇自己的別名,一個字母都行。
常規命令快捷鍵
gl=git log --oneline --all --graph --decorate $*
gp=git pull
gs=git status
gdb=git branch -D $*
效果如下:
關於命令列中的 $*
表示當前位置是一個變數,由外部傳入。
如下操作含義:
- 檢視當前目錄下分支
- 建立 test 分支(當然此操作也可以別名控制)
- 列出所有分支名稱
- 上次指定分支 test
這裡 gdb=git branch -D $* 而test 透過 $*傳入命令中 最終 gdb test = git branch -D test。
就問你 6 不 6。
這些自定義命令只有你自己知道,別人看不懂,學會之後人家眼裡盡是你的牛逼。
如何執行指令碼
有人說我得了懶癌。每次切換到 python 指令碼目錄再執行很麻煩。想在 Cmder 中用別名執行一個 python 指令碼,
可以的,你想得到,Cmder 就可以幫你做到。
舉個例子:
熟悉安卓開發同學都知道,每次 logcat 列印程式資訊,其他程式日誌會擾亂當前除錯程式,只想看到當前程式日誌,怎麼辦呢?可以如下操作:
步驟一:可在 Cmder 安裝目錄下新建 script 資料夾放入目標 python 指令碼
其中 logcatPkg_27.py 可以幫你過濾其他程式日誌,只聚焦當前程式日誌。
步驟二: 命令中透過%CMDER_ROOT%\script 指定到目標指令碼。
如:執行 logcatPkg_27.py 指令碼並在$* 處傳入關注程式包名即可。
logcatp=python "%CMDER_ROOT%\script\logcatPkg_27.py" $*
logcatPkg_27.py 程式碼如下:
#!/usr/bin/env python
#coding:utf-8
#This script is aimed to grep logs by application(User should input a packageName and then we look up for the process ids then separate logs by process ids).
import os
import sys
packageName=str(sys.argv[1])
def getDeviceId():
devices = []
command = "adb devices -l | sed '1d'| awk '{print $1}'"
result = os.popen(command)
deviceId = result.readline().strip()
if deviceId != "":
devices.append(deviceId)
while (deviceId != ""):
deviceId = result.readline().strip()
if deviceId != "":
devices.append(deviceId)
return devices;
def printPakcageLog(device, packageName):
# print device, packageName
print("Got device: "+device)
command = "adb -s %s shell ps | grep %s | awk '{print $2}'"%(device, packageName)
# print command
p = os.popen(command)
##for some applications,there are multiple processes,so we should get all the process id
pid = p.readline().strip()
filters = pid
while(pid != ""):
pid = p.readline().strip()
if (pid != ''):
filters = filters + "|" + pid
#print 'command = %s;filters=%s'%(command, filters)
if (filters != '') :
cmd = 'adb -s %s logcat -v time | grep --color=always -E "%s" '%(device, filters)
os.system(cmd)
devices = getDeviceId();
devicesNum = len(devices);
if devicesNum < 1:
print("Device not found.")
elif devicesNum == 1:
device = devices[0]
printPakcageLog(device, packageName)
else:
print("Please chose a dvice, input the index of the device:")
for i in xrange(0, devicesNum):
print(str(i) + "\t" + devices[i])
index = raw_input("")
printPakcageLog(devices[int(index)], packageName)
步驟三:執行自定義 python 命令即可
如圖中,指定一個包名引數,python 指令碼就會找到對應包名的 uid ,然後列印所有相關程式資訊。
Cmder 別名優勢
有槓精會說,git 那個別名多此一舉了,本身.gitconfig 裡就支援別名操作,難道不知道?如下
$ cat .gitconfig
[alias]
co = checkout
ci = commit
br = branch
st = status
[user]
name = Your Name
email = your@email.com
需要說明的是,這種別名每次使用時都需要帶上 git,才能真正執行,比如上述中執行 co 需要寫成 git co 才可執行。
與 Cmder 對比很容易看成 Cmder 別名優勢:
- 讓別名更簡潔,
- 支援透過$*傳入自定義變數更加靈活,
- 支援其他工具的自定義命令。
總結
本文介紹了 Cmder 命令列終端工具的特點和使用方法,重點講解了如何自定義命令別名。透過 Git 別名配置和指令碼別名配置,展示了 Cmder 別名的強大之處。最後,透過與 Git 別名對比,進一步展示了 Cmder 的優勢。Cmder 自定義別名可以讓命令更簡潔、更靈活,提高開發效率。
❤️本文由公眾號程式設計黑板報 原創,關注我,獲取我的最新文章~❤️