Cmder: 懶癌必備!從此告別記事本記命令的日子

睡覺誰叫發表於2023-04-20

前言

平時開發中遇到這樣那樣的命令需要記下來,一般做法是這樣。

  1. 新建記事本
  2. 將需要記下的關鍵命令儲存。
  3. 每次需要使用時,貼上複製即可。

好像沒什麼毛病!直到遇到了 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 $*

效果如下:

關於命令列中的 $*

表示當前位置是一個變數,由外部傳入。

如下操作含義:

  1. 檢視當前目錄下分支
  2. 建立 test 分支(當然此操作也可以別名控制)
  3. 列出所有分支名稱
  4. 上次指定分支 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 支援別名啊,Cmder別名多此一舉了,本身.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 別名優勢:

  1. 讓別名更簡潔,
  2. 支援透過$*傳入自定義變數更加靈活,
  3. 支援其他工具的自定義命令。

總結

本文介紹了 Cmder 命令列終端工具的特點和使用方法,重點講解了如何自定義命令別名。透過 Git 別名配置和指令碼別名配置,展示了 Cmder 別名的強大之處。最後,透過與 Git 別名對比,進一步展示了 Cmder 的優勢。Cmder 自定義別名可以讓命令更簡潔、更靈活,提高開發效率。

❤️本文由公眾號程式設計黑板報 原創,關注我,獲取我的最新文章~❤️

相關文章