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.系统版本 ...
随机推荐
- JavaWeb学习--EL表达式
一.EL表达式: 1.命令表达式: ${作用域对象别名.共享数据} 2.命令作用: 1)EL表达式是EL工具包提供一种特殊命令格式[表达式命令格式] 2)EL表达式在JSP文件上使用 3)负责在JSP ...
- mysql 设置相关
告诉mysql客户端这边的文字编码 告诉mysql希望返回的结果集编码: set character_set_client=gbk; set character_set_results=gbk; ...
- awk command
https://www.cnblogs.com/bluevitality/p/6691041.html
- C#学习之详解C#Break ,Continue, Return
C#编程语法中break ,continue, return这三个常用的关键字的学习对于我们编程开发是十分有用的,那么本文就向你介绍break ,continue, return具体的语法规范. C# ...
- .net Core5.0使用IdentityServer4 进行权限控制
.net Core5.0使用IdentityServer4 进行权限控制 IdentityServer4 ASP.NET Core的一个包含OpenID Connect和OAuth 2.0协议的框架 ...
- VScode好用插件
1.Anaconda Extension Pack 可以自动补全anaconda包中的属性名称 2.Code Spell Checker 单词拼写检查,非常推荐,有时候会拼错单词,这个不仅可以指出错误 ...
- k8s基本操作
注意:k8s的很多操作需要指定命名空间,如果不指定,默认default的命名空间,很多东西就查不出来了 kubectl get cs # 查看集群状态kubectl get nodes # 查看集群节 ...
- Use `tensor.item()` in Python or `tensor.item<T>()` in C++ to convert a 0-dim tensor to a number
IndexError: invalid index of a 0-dim tensor. Use `tensor.item()` in Python or `tensor.item<T>( ...
- k8s探针
探针是由kubelet对容器执行的定期诊断.要执行诊断,kubelet调用由容器实现的Handler.有三类处理程序: ExecAction:在容器内执行指定命令.如果命令退出时返回码为0认为诊断成功 ...
- MySQL视频学习 1-18小节
地址:https://www.bilibili.com/video/av39807944/?p=16 1-15:撘环境.建表.数据类型(https://www.runoob.com/mysql/mys ...