Cmder Shell 命令行工具 终端 [MD]


目录

  • 目录
  • Cmder
    • 介绍
    • 常用快捷键
    • 终端设置
      • 常用设置
      • 添加到右键菜单
      • config 目录介绍
      • 命令行参数介绍
    • 集成到其他终端中
      • 集成到 Windows Terminal
      • 集成到 Android Studio
    • 自定义别名与自定义脚本
      • cmd 别名
      • bash 别名
      • PowerShell 别名
      • 我定义的 bash 别名

我的GitHub 我的博客 我的微信 我的邮箱
baiqiantao baiqiantao bqt20094 baiqiantao@sina.com

目录

Cmder

  • 官网
  • GitHub
  • 官方文档

Portable 便携的 console emulator for Windows.

下载的时候,会有两个版本,唯一的差别在于有没有内建git工具。

介绍

Cmder is a software package on Windows. It is based on ConEmu with major config overhaul 重大配置改革, comes with a Monokai color scheme 配色方案, amazing clink (further enhanced 进一步增强 by clink-completions) and a custom prompt layout 自定义提示布局.

主要特点

  • 便携,没有外部依赖,可移植,解压即可用:The main advantage of Cmder is portability
  • 良好的用户界面:丰富的颜色主题(Solarized、Twilight、Ubuntu、xterm、Monokai,可自定义)、可定制字体
  • 自带gitlscurl等命令
  • 完全支持中文
  • 可设置命令别名
  • 支持tab分页、同屏多端口(支持水平分割、垂直分割)
  • 支持自定terminal,无论是CMD、PowerShell、bash都可以,还可以注入环境变量

常用快捷键

如果想使用自定义的快捷键,只需将\vendor\conemu-maximus5\ConEmu.xml中的HotKeys的部分覆盖即可。

基本功能

  • Ctrl + T双击底部栏:新建页签
  • Ctrl + W鼠标中键点击 Tab:关闭页签,建议把Ctrl+W的功能改为删除光标左侧的单词
  • Ctrl + numCtrl + Tab:切换页签
  • Alt + enter:切换全屏
  • Ctrl + R:历史命令搜索,仅部分 shell 中支持
  • Win + Alt + P:设置
  • Alt + F4:关闭所有页签
  • Tab:自动路径补全

输入操作

  • 一个单词一个单词向左/右移动光标:Ctrl + 左右箭头
  • 一个字符一个字符向左/右移动光标:左右箭头
  • 移动光标到整条命令的起始/结束位置:HOME 或 END【重要】
  • 删除光标左/右侧的所有内容:Ctrl + U/K【重要】
  • 删除光标左侧的单词:Ctrl + W【重要】(默认功能为关闭页签,需要自定义)
  • 删除光标右侧的单词:Alt + D【重要】
  • 删除光标左/右侧的字符:backspace 或 DEL

终端设置

配置文件存放在安装目录下的\vendor\conemu-maximus5\ConEmu.xml中,可拿现成的文件覆盖

如果只想使用自定义的快捷键,只需将HotKeys的部分覆盖即可。

常用设置

  • 通用-界面语言:可以设置中文语言,建议禁用自动更新(因为网络太差了)
  • 通用-字体:
    • 字符集选择默认的ANSI
    • 不要勾选Compress long string to fit space,否则中文显示可能有问题
  • 通用-背景:可以设置背景图片,或者设置透明度
  • 启动-启动选项:
    • 指定命名任务时,可以选择默认启动的终端类型,如bash、cmd、powershell
    • 建议勾选自动保存/恢复打开的标签页,不管关闭之前打开了几个 Tab,都能完全恢复
  • 功能特性-颜色-方案:可以选择颜色方案,如果觉得不合适也支持自定义

添加到右键菜单

管理员身份打开 Cmder,运行以下命令,然后在文件夹上右键点击Cmder Here,就能在 Cmder 里进入该目录。

cmder /register all    //注册
cmder /unregister all  //取消注册

config 目录介绍

  • /profile.d/:用于存放在启动时执行的脚本文件
  • clink_settings
  • user_aliases.cmd:仅用于定义cmd的别名,不可以在启动时执行命令
  • user_profile.cmd:可用于定义cmd的别名,也可以在启动时执行命令
  • user_profile.ps1:可用于定义PowerShell的别名,也可以在启动时执行命令
  • user_profile.sh:可用于定义bash的别名,也可以在启动时执行命令
  • user-ConEmu.xml
echo %CMDER_ROOT%       # 打印 Cmder 的路径【C:\_dev\_Tools\cmder\cmder1.3.18】
echo %ConEmuDir%        # 打印 ConEmu 的路径【...\cmder1.3.18\vendor\conemu-maximus5】
echo %ConEmuBaseDir%    # 打印 ConEmu 的路径【...\cmder1.3.18\vendor\conemu-maximus5\ConEmu】

命令行参数介绍

Argument Description
/C [user_root_path] 设置 Cmder 的根目录
/M ConEmu 存储设置
/SINGLE 以单模式启动 Cmder
/START [start_path] 设置启动的初始路径
/TASK [task_name] 设置启动的任务
/X [ConEmu extras params] 将参数转发给 ConEmu
/REGISTER [ALL, USER] 注册右键快捷方式【常用】
/UNREGISTER [ALL, USER] 取消注册右键快捷方式【常用】

集成到其他终端中

Cmder 可与 Windows TerminalAndroid StudioVS CodeCmdBash 等 terminal/IDEs 集成,详见 wiki

集成到 Windows Terminal

  • 首先需要定义 CMDER_ROOT 用户变量
  • 打开 Windows Terminal 的设置文件 settings.json,在profiles中的list中添加如下内容
    {
          "guid": "{00000000-0000-0000-ba54-000000000132}",
          "name": "Cmder",
          "commandline": "cmd.exe /k %cmder_root%/vendor/init.bat",
          "icon": "%cmder_root%/icons/cmder.ico",
          "hidden": false
    },
  • 可以通过修改defaultProfile(值可以是name,例如"Cmder"),将 Cmder 作为 Windows Terminal 启动时的默认终端
  • 可以通过修改colorScheme(值来自于"schemes": [...],例如"Monokai Cmder"),将 Cmder 的配色方案改为 Monokai-Cmder
  • 可以通过修改commandline,将在 Windows Terminal 中启动 Cmder 时的默认终端改为 Powershell

集成到 Android Studio

  • 在 Cmder 安装目录下新建一个 cmder_shell.bat 文件,内容如下:
@echo off
@cmd.exe /k %~dp0\vendor\init.bat
  • 在 IDE 中按 Ctrl + Alt + S 打开设置页,并在搜索框中键入terminal
  • Shell path 中,将 cmd.exe 更改为[cmder 安装目录]\cmder_shell.bat

自定义别名与自定义脚本

之所以能自定义别名,或者能在启动时执行自定义脚本,是因为在启动时都会首先执行脚本%CMDER_ROOT%/vendor/init.bat,所以我们也可以通过修改init.bat中的逻辑做很多高级自定义的事情。

可将自己的可执行文件放入安装目录下的bin文件夹中,bin 文件夹将在运行时注入到 PATH 环境变量中。

cmd 别名

  • 可以通过alias name=command定义并保存别名,例如alias user=echo %HOME%
  • 定义的别名将保存在%CMDER_ROOT%\config\user_aliases.cmd文件中,也可以直接修改此文件
  • 可以通过$1-9$*获取传递的参数,其中$1表示第一个参数
  • 可以通过%NAME%引用当前环境的或自定义的变量/常量

有关 Cmd.exe 复杂别名/宏的更多详细信息,请参阅 微软 DOSKEY 文档

在启动 cmd 时会自动执行以下脚本文件:

  • %CMDER_ROOT%\config\user_profile.cmd
  • %CMDER_ROOT%\config\profile.d\*.cmd
  • %CMDER_ROOT%\config\profile.d\*.bat
  • 注意:%CMDER_ROOT%\config\user_aliases.cmd只能用来定义别名,而不能用来存放要执行的命令

bash 别名

  • 可以通过alias name=command定义别名,例如alias user='echo $HOME',但仅在当前会话有效,而不会持久化
  • 可以通过在$CMDER_ROOT/config/user_profile.sh中添加上述语句来持久化别名
  • 可以通过$NAME${NAME}引用当前环境的或自定义的变量/常量

在启动 bash 时会自动执行以下脚本文件(当然也可以将别名定义在以下任一文件中):

  • $CMDER_ROOT/config/user_profile.sh
  • $CMDER_ROOT/config/profile.d/*.sh
  • $HOME/.bashrc ------ 注意,这个会影响所有的 bash 终端

PowerShell 别名

  • 可以通过[new-alias | set-alias] alias command定义别名,例如new-alias e explorer(只支持将命令简化,不支持参数)
  • 可以通过Get-Alias获取当前支持的别名,包含内置的别名,例如pwd -> Get-Location
  • 可以通过Get-Alias alias获取别名alias的定义,例如Get-Alias pwd
  • 在 PowerShell 中引用 变量/常量 的方式是$NAME$ENV:NAME

PowerShell 原生具有简单别名的支持,因此 PowerShell 会话中不支持带有可选参数的复杂别名。

在启动 PowerShell 时会自动执行以下脚本文件(当然也可以将别名定义在以下任一文件中):

  • $ENV:CMDER_ROOT\config\user_profile.ps1
  • $ENV:CMDER_ROOT\config\profile.d\*.ps1

我定义的 bash 别名

可以添加任意的方法变量命令的alias等。

# use this file to run your own startup commands for msys2 bash'

# -----------------------------Git命令-----------------------------
GIT_USER_NAME=baiqiantao

alias gs='git status'
alias gl='git log -5  --pretty=format:"%Cred%h %Cgreen[%cr] %Cred%an %Creset%s %Creset"'
alias gc='git checkout'
alias gb='git branch'
alias gpush='git push origin HEAD:refs/for/`git rev-parse --abbrev-ref HEAD`'
alias gpr='git pull --rebase'
alias gr='git rev-parse --abbrev-ref HEAD'
alias gcp='git cherry-pick'
alias gcpc='git cherry-pick --continue'
alias gca='git commit --amend'
gcm() {
    git commit -m "$1"
}

# -----------------------------adb命令-----------------------------
PACKAGE_NAME=com.bqt.test

alias adbde='adb devices'
alias adbi='adb install '
alias adbu='adb uninstall ${PACKAGE_NAME}'
alias adbk='adb devices; adb kill-server; adb start-server; adb devices'
alias adbc='adb shell pm clear ${PACKAGE_NAME}' #清除数据
alias adbfs='adb shell am force-stop ${PACKAGE_NAME}'  #杀死 package 进程
alias adba='adb shell dumpsys activity top | grep ACTIVITY'  #查看栈顶 activity
alias adbt='adb shell dumpsys window | grep mCurrentFocus'  #当前 activity
alias adbd='adb shell am set-debug-app -w ${PACKAGE_NAME}'  #设为调试模式
alias adbcd='adb shell am clear-debug-app'  #清除以前针对调试用途的设置
alias adbset='adb shell am start -n ${ACTIVITY_SETTINGS} -e :settings:show_fragment ${FRAG_MANAGE_APP}'

alias adbsc='adb shell screencap -p /sdcard/$(date +%Y.%m.%d-%H.%M.%S).png' #截屏
alias adbsr='adb shell screenrecord --verbose /sdcard/$(date +%Y.%m.%d-%H.%M.%S).mp4' #录屏

ACTION_USER_PRESENT="android.intent.action.USER_PRESENT" #解锁事件
alias adbas='adb shell am broadcast -a ${ACTION_USER_PRESENT}' #模拟解锁事件

adbui() {
    adb shell uiautomator dump sdcard/sc.uix
    adb pull sdcard/sc.uix ~/Desktop/
    adb shell screencap -p sdcard/sc.png
    adb pull sdcard/sc.png ~/Desktop/
}


# -----------------------------cd命令-----------------------------
alias e.='explorer .'
alias cda='cd ..'
alias ea='cd ./app/build/outputs/apk; explorer .; cd -'
alias es='cd C:/_dev/_Tools/cmder/cmder1.3.5/config; explorer .; cd -'
cls() {
    clear #清屏
}

# -----------------------------其他命令----------------------------
alias mdate='echo $(date +%Y.%m.%d-%H.%M.%S)' #当前时间

help() {
    echo "配置文件在 $CMDER_ROOT/config/user_profile.sh"
    echo -----------------
    cat $CMDER_ROOT/config/user_profile.sh
    echo
}

2019-8-25