平時開發中遇到這樣那樣的命令需要記下來,一般做法是這樣。
好像沒什麼毛病!直到遇到了 Cmder。。。
當看到同事分析問題時在 Cmder 裡命令快捷鍵刷刷一頓操作,覺得挺厲害滴。感覺這同事技術好牛,快捷鍵用這麼好。後來才知道是 Cmder 用的溜,給人感覺很厲害。從某種意義上說,Cmder 簡直是技術人裝逼必備神器。
本文不打算講解 Cmder 的安裝和設定過程。可自行查閱,不清楚也可留言。這裡重點說說 Cmder 最吸引功能: 自定義命令別名
講解自定義命令別名之前,先簡單介紹下 Cmder。
一句話概括:作者出於 windows 上好的命令列終端太少而建立的 Cmder。
Cmder 是 windows 上一款命令列終端工具。
Cmder 特色:
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 環境設定時都需要新增到系統環境變數中。
列舉兩個相關場景
gpushr = git push origin HEAD:refs/for/master%[email protected],[email protected]
這樣在 Cmder 中直接敲 gpushr 就行了,當然這個 gpushr 是我自己取的,您可以選擇自己的別名,一個字母都行。
gl=git log --oneline --all --graph --decorate $*
gp=git pull
gs=git status
gdb=git branch -D $*
效果如下:
表示當前位置是一個變數,由外部傳入。
如下操作含義:
這裡 gdb=git branch -D $* 而test 通過 $*傳入命令中 最終 gdb test = git branch -D test。
就問你 6 不 6。
這些自定義命令只有你自己知道,別人看不懂,學會之後人家眼裡盡是你的牛逼。
有人說我得了懶癌。每次切換到 python 指令碼目錄再執行很麻煩。想在 Cmder 中用別名執行一個 python 指令碼,
可以的,你想得到,Cmder 就可以幫你做到。
舉個例子:
熟悉安卓開發同學都知道,每次 logcat 列印程序資訊,其他程序紀錄檔會擾亂當前偵錯程序,只想看到當前程序紀錄檔,怎麼辦呢?可以如下操作:
其中 logcatPkg_27.py 可以幫你過濾其他程序紀錄檔,只聚焦當前程序紀錄檔。
如:執行 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 指令碼就會找到對應包名的 uid ,然後列印所有相關程序資訊。
有槓精會說,git 那個別名多此一舉了,本身.gitconfig 裡就支援別名操作,難道不知道?如下
$ cat .gitconfig
[alias]
co = checkout
ci = commit
br = branch
st = status
[user]
name = Your Name
email = [email protected]
需要說明的是,這種別名每次使用時都需要帶上 git,才能真正執行,比如上述中執行 co 需要寫成 git co 才可執行。
與 Cmder 對比很容易看成 Cmder 別名優勢:
本文介紹了 Cmder 命令列終端工具的特點和使用方法,重點講解了如何自定義命令別名。通過 Git 別名設定和指令碼別名設定,展示了 Cmder 別名的強大之處。最後,通過與 Git 別名對比,進一步展示了 Cmder 的優勢。Cmder 自定義別名可以讓命令更簡潔、更靈活,提高開發效率。
❤️本文由公眾號程式設計黑板報 原創,關注我,獲取我的最新文章~❤️