• Cmder: 懒癌必备!从此告别记事本记命令的日子


    前言

    平时开发中遇到这样那样的命令需要记下来,一般做法是这样。

    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 自定义别名可以让命令更简洁、更灵活,提高开发效率。

    ❤️本文由公众号编程黑板报 原创,关注我,获取我的最新文章~❤️

  • 相关阅读:
    在Mac中使用 brew services start redis 命令启动、停止Redis服务报错
    框架分析(6)-Ruby on Rails
    【macOS付费软件推荐】第4期:Coherence X
    设计模式_迭代器模式
    基于Python对豆瓣电影数据爬虫的设计与实现
    centos7使用docker-compose一键搭建mysql高可用主从集群
    Bazel 安装
    算法竞赛进阶指南 基本算法 0x04 二分与三分
    RSocket 与 gRPC 基准测试
    华为S5700交换机初始化和配置telnet,ssh用户方法
  • 原文地址:https://www.cnblogs.com/programmingBB/p/17335454.html