Cmder: 懒癌必备!从此告别记事本记命令的日子
前言
平时开发中遇到这样那样的命令需要记下来,一般做法是这样。
- 新建记事本
- 将需要记下的关键命令保存。
- 每次需要使用时,粘贴复制即可。
好像没什么毛病!直到遇到了 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 自定义别名可以让命令更简洁、更灵活,提高开发效率。
️本文由公众号编程黑板报 原创,关注我,获取我的最新文章~️
Cmder: 懒癌必备!从此告别记事本记命令的日子的更多相关文章
- 一文让你从此告别HTTP乱码(一)Request篇
#circle { background-color: #8fcbec; border: 3px } 概述 开发Web项目的过程中,经常遇到浏览器中显示的内容乱码,或者服务器获取浏览器请求参数时乱码的 ...
- 一文让你从此告别HTTP乱码(二)Response篇
#circle { background-color: #8fcbec; border: 3px } 概述 开发Web项目的过程中,经常遇到浏览器中显示的内容乱码,或者服务器获取浏览器请求参数时乱码的 ...
- Git命令太多记不住?有了这个神器,从此告别输入命令行
一 .SourceTree简介 SourceTree 是 Windows 和Mac OS X 下免费的 Git 和 Hg 客户端,拥有可视化界面,容易上手操作.同时它也是Mercurial和Subve ...
- VisualSVN Server 从此告别SVN记事本配置
http://www.visualsvn.com/downloads/ 注意下载的是Server版本,他还会提供一个visual Studio的插件: 安装完毕后,可以在管理界面进行角色添加,创建 ...
- 异步调试神器Slog,“从此告别看日志,清日志文件了”
微信调试.API调试和AJAX的调试的工具,能将日志通过WebSocket输出到Chrome浏览器的console中 — Edit 92 commits 4 branches 3 releases ...
- 10 程序员必备:Linux日常维护命令
一.服务器硬件配置 1.查看硬盘及分区情况 # fdisk -l 2.查看分区空间使用情况 可以查看各分区大小.已使用.可用.已使用百分比.挂载情况 1)默认单位为K # df 2)可读性更好的显示, ...
- 程序员必备:Oracle日常维护命令
上一篇讲了Linux的日常维护命令,这篇讲讲Oracle的日常维护命令.工作中需要使用Oracle数据库的童鞋们,相信或多或少都需要对Oracle做一些基本的维护操作,例如导入导出总该有吧?( ...
- 每天记命令:lscpu 和 cat /proc/cpuinfo
[1]lscpu lscpu命令,查看cpu相关的统计信息. socket 就是主板上插cpu的槽的数目,也就是可以插入的物理CPU的个数(比如上例,可以插入1个CPU). core 就是我们平时说的 ...
- 昼猫笔记 从此告别复杂代码--JavaScript
昼猫笔记--给你带来不一样的笔记 不止是笔记 更多的是思考 大家好,我是一只来自喵星的前端初学者,由于我们喵星人科技较为落后,昼猫从今天开始带着使命来到地球学习前端知识. 从今天开始,猫猫我就从Jav ...
- 1.移动端自动化测试-知识笔记(面试必备,测试点,adb命令)
移动端测试: 移动应用,特性(功能) 满足 需求(产品文档,隐性需求) 一.App功能测试: 死活背下来1.业务逻辑正确性测试: 产品文档,隐性需求- 写成测试用例 2.兼容性测试: 1.系统版本 ...
随机推荐
- CentOS 7(Linux)安装Docker
CentOS 7(Linux)安装Docker 一.分别执行下列命令添加并更新yum源 yum update yum install epel-release -y yum clean all yum ...
- 11、jmeter配置元件--计数器
前面学过csv和变量 csv里面的数据是固定的 如果里面的数据不够 线程要么就停止要么就需要重头再来 不太灵活 用到固定化的数据,比如说多少个用户等等 如果有一些是变动的 随着线程数增加 数据 ...
- 记录一次HAWQ手工启动
一.环境变量初始化 使用hawq的命令必须先进行环境变量的初始化 命令不能以 root 用户执行,应该以 gpadmin 用户执行 source /usr/local/apache-hawq/gree ...
- 使用python制作nRF52832升级包和合成烧录文件的经验(nRF52832 DFU经验分享)
使用python制作nRF52832升级包和合成烧录文件,青风开发板的作者已经说得很明白,不过作者使用的python是2.7的,已经很落后了.目前python已经更新到3.10.4了.所以我换了台电脑 ...
- 01 关于HTML基础-构建Web,这些你都知道吗?(很全)
以下均是参考MDN web docs,总结出来的比较重要的知识点,与君共勉.不妥之处,还望大家及时提出! 什么是HTML? 是一种告诉浏览器如何组织页面的标记语言.它由一系列元素组成. HTML元素 ...
- C语言 (数据结构)在顺序表中用二分查找和冒泡排序算法
main.c: #include <stdio.h> #include <stdlib.h> #include "SequenceList.h" int m ...
- WPF中的DataGrid支持Excell粘贴数据
其中XMAL文件中的表格样式: <DataGrid x:Name="DataListView" AutoGenerateColumns="False" H ...
- NX 二次开发 多个功能集成一个DLL的方法
用C++做NX二次开发,一个功能建一个工程,管理起来很不方便,在网上找了些资料学习,成功的把多个功能做到一个工程里(多功能集成到一个DLL). 1.首先要了解外挂的菜单文件的基础,要实现多个功能集合在 ...
- 1.java基本语法
一.数据和数据类型 (一)标识符:给变量.常量.方法类.对象等命名的符号 (二)变量和常量 1.变量:值在运行时可以改变的量: 每个变量属于特定的数据类型,使用前要先声明,然后赋值,初始化或赋值后才能 ...
- DRF的序列化器Serializer
一 序列化器的作用 1. 序列化,序列化器会把模型对象转换成字典,经过视图中response对象以后变成json字符串 2. 反序列化,视图中request会把客户端发送过来的数据转换成字典,序列化器 ...