Cmder
Cmder 是一个软件包,源于对 Windows 缺乏可用控制台模拟器的纯粹不满而创建。它基于 ConEmu,但进行了大幅配置改造,配备了 Monokai 配色方案、出色的 clink(通过 clink-completions 进一步增强)以及自定义提示符布局。
为什么使用它
Cmder 的主要优势在于其便携性。它设计为完全自包含,无需外部依赖,这使得它非常适合存储在 USB 存储器或云存储中。因此,你可以随身携带你的控制台、别名和二进制文件(如 wget
、curl
和 git
)。
Cmder 的用户界面也设计得更加赏心悦目,你可以在这里比较 Cmder 和 ConEmu 之间的主要区别。
安装
单用户便携配置
- 下载最新版本
- 解压缩文件。注意:此路径不应为
C:\Program Files
或任何其他需要管理员权限才能修改配置文件的位置 - (可选)将你自己的可执行文件放入
%cmder_root%\bin
文件夹,以添加到 PATH 中。 - 运行
Cmder.exe
共享 Cmder 安装与非便携个人用户配置
- 下载最新版本
- 将文件解压到共享位置。
- (可选)将你自己的可执行文件和自定义应用程序文件夹放入
%cmder_root%\bin
。参见:bin/README.md- 此文件夹默认会被添加到你的 PATH 中。
- 参见 'Command Line Arguments for
init.bat
' 表中的/max_depth [1-5]
以递归添加子目录。
- (可选)将你自己的自定义应用程序文件夹放入
%cmder_root%\opt
。参见:opt/README.md- 此文件夹不会被添加到你的 PATH 中,因此你可以完全控制要添加的内容。
- 使用
/C
命令行参数运行Cmder.exe
。例如:cmder.exe /C %userprofile%\cmder_config
-
如果缺少以下目录结构,这将创建它。
c:\users\[username]\cmder_config ├───bin ├───config │ └───profile.d └───opt
-
- (可选)将你自己的可执行文件和自定义应用程序文件夹放入
%userprofile%\cmder_config\bin
。- 此文件夹默认会被添加到你的 PATH 中。
- 参见 'Command Line Arguments for
init.bat
' 表中的/max_depth [1-5]
以递归添加子目录。
- (可选)将你自己的自定义应用程序文件夹放入
%user_profile%\cmder_config\opt
。- 此文件夹不会被添加到你的 PATH 中,因此你可以完全控制要添加的内容。
- 共享安装和个人用户配置位置都可以包含完整的初始化和 profile.d 脚本集,实现共享配置与用户覆盖。详见下文。
Cmder.exe 命令行参数
参数 | 描述 |
---|---|
/C [user_root_path] | 个人用户 Cmder 根文件夹。例如:%userprofile%\cmder_config |
/M | 使用 conemu-%computername%.xml 存储 ConEmu 设置,而不是 user_conemu.xml |
/REGISTER [ALL, USER] | 注册 Windows Shell 菜单快捷方式。 |
/UNREGISTER [ALL, USER] | 注销 Windows Shell 菜单快捷方式。 |
/SINGLE | 以单一模式启动 Cmder。 |
/START [start_path] | 启动时的文件夹路径。 |
/TASK [task_name] | 启动后要执行的任务。 |
/X [ConEmu extras pars] | 向 ConEmu 传递参数 |
上下文菜单集成
如果你已经体验过 Cmder 并想将其安装在更永久的位置;
在选定文件夹中打开 Cmder 的快捷方式
- 以管理员身份打开终端
- 导航到您放置Cmder的目录
- 执行
.\cmder.exe /REGISTER ALL
如果您收到"访问被拒绝"的消息,请确保您在管理员提示符下执行该命令。
在文件资源管理器窗口中,右键单击目录内部或目录本身,即可在上下文菜单中看到"Cmder Here"选项。
键盘快捷键
标签页操作
- Ctrl + T : 新建标签页对话框(也许您想以管理员身份打开cmd?)
- Ctrl + W : 关闭标签页
- Ctrl + D : 关闭标签页(如果在空命令行上按下)
- Shift + Alt + #数字 : 快速新建标签页:1 - CMD,2 - PowerShell
- Ctrl + Tab : 切换到下一个标签页
- Ctrl + Shift + Tab : 切换到上一个标签页
- Ctrl + #数字 : 切换到第#个标签页
- Alt + Enter: 全屏
Shell操作
- Ctrl + Alt + U : 在目录结构中向上移动(非常实用的功能!)
- End、Home、Ctrl : 像在Windows中一样遍历文本
- Ctrl + R : 历史记录搜索
- Shift + 鼠标 : 从缓冲区选择并复制文本
(一些快捷键尚未记录,但它们确实存在 - 请在此处记录它们)
功能特性
在一个窗口中使用标签页访问多个shell
您可以打开多个标签页,每个标签页包含以下一种shell:
任务 | Shell | 描述 |
---|---|---|
Cmder | cmd.exe | 增强的Windows cmd.exe shell,包含Git、Git感知提示符、Clink(GNU Readline)和别名。 |
管理员Cmder | cmd.exe | 管理员权限的Windows cmd.exe Cmder shell。 |
PowerShell | powershell.exe | 增强的Windows PowerShell,包含Git和Git感知提示符。 |
管理员PowerShell | powershell.exe | 管理员权限的Windows powershell.exe Cmder shell。 |
Bash | bash.exe | 在Windows上运行的类Unix/Linux bash shell。 |
管理员Bash | bash.exe | 管理员权限的在Windows上运行的类Unix/Linux bash shell。 |
Mintty | bash.exe | 在Windows上运行的类Unix/Linux bash shell。请参阅下文了解Mintty配置的差异。 |
管理员Mintty | bash.exe | 管理员权限的在Windows上运行的类Unix/Linux bash shell。请参阅下文了解Mintty配置的差异。 |
Cmder、PowerShell和Bash标签页都在Windows Console API之上运行,在Cmder中的工作方式与您预期的一样,可以使用ConEmu的配色方案、按键绑定和ConEmu设置对话框中定义的其他设置。
⚠ 注意: 只有完整版的Cmder预装了bash,使用的是捆绑的git-for-windows安装。在Cmder迷你版上,预配置的Bash标签页可能无法正常工作,需要额外配置。
但是,您可以选择使用外部安装的bash,比如Microsoft的Linux子系统(称为WSL)或提供Windows上POSIX支持的Cygwin项目。
⚠ 注意: Mintty标签页使用名为'mintty'的程序作为终端模拟器,它不基于Windows Console API,而是由ConEmu以图形方式渲染。Mintty与其他标签页的不同之处在于它支持xterm/xterm-256color TERM类型,并且不适用于ConEmu的设置,如配色方案和按键绑定。因此,预期会有一些功能上的差异,例如Cmder无法对其应用系统范围的配置。
因此,mintty特定的配置是通过[%USERPROFILE%|$HOME]/.minttyrc
文件完成的。您可以在这里阅读更多关于Mintty及其配置文件的信息。
为mintty设置Cmder便携式终端颜色的示例:
从bash/mintty shell中:
cd $CMDER_ROOT/vendor
git clone https://github.com/karlin/mintty-colors-solarized.git
cd mintty-colors-solarized/
echo source \$CMDER_ROOT/vendor/mintty-colors-solarized/mintty-solarized-dark.sh>>$CMDER_ROOT/config/user_profile.sh
您可以在这里找到一些与Cmder匹配的mintty Monokai配色方案。
更改Cmder默认cmd.exe
提示符配置文件
Cmder默认的cmd::Cmder
shell提示符使用Clink
进行自定义,可以通过编辑以下两个位置之一的配置文件进行配置:
- 单用户便携配置
%CMDER_ROOT%\config\cmder_prompt_config.lua
- 共享Cmder安装的非便携个人用户配置
%CMDER_USER_CONFIG%\cmder_prompt_config.lua
如果您的Cmder设置中没有此文件,请从 %CMDER_ROOT%\vendor\cmder_prompt_config.lua.default
创建它。
自定义选项包括:
- 颜色
- 单行/多行
- 完整路径/仅文件夹
- 在提示符开头添加
[用户]@[主机]
- 用
~
表示主目录 λ
符号
每个设置的文档都在文件中。
使用任务参数更改Cmder默认cmd.exe
Shell的启动行为
-
按 Win + Alt + T
-
点击以下之一:
1. {cmd::Cmder as Admin}
2. {cmd::Cmder}
-
在指定位置添加命令行参数:
注意:请留意引号!
cmd /s /k ""%ConEmuDir%\..\init.bat" [在此处添加参数]"
init.bat
的命令行参数
参数 | 描述 | 默认值 |
---|---|---|
/c [用户cmder根目录] | 为"以管理员身份运行Cmder"会话启用用户bin和config文件夹,因为环境不共享。 | 未设置 |
/d | 启用调试输出。 | 未设置 |
/f | 启用Cmder快速初始化模式。这会禁用某些功能,详情请参见pull request #1492。 | 未设置 |
/t | 启用Cmder计时初始化模式。这会显示运行初始化脚本所需的时间。 | 未设置 |
/git_install_root [文件路径] | 用户指定的Git安装根路径。 | %CMDER_ROOT%\vendor\Git-for-Windows |
/home [主文件夹] | 用户指定的文件夹路径,用于设置%HOME% 环境变量。 | %userprofile% |
/max_depth [1-5] | 定义为%cmder_root%\bin 和%cmder_user_bin% 添加到路径时的最大递归深度。 | 1 |
/nix_tools [0-2] | 定义如何将*nix 工具添加到路径。首选Windows工具:1,首选*nix工具:2,%PATH% 中不包含/usr/bin :0 | 1 |
/svn_ssh [ssh.exe路径] | 定义%SVN_SSH% ,以便我们可以对ssh svn仓库使用git svn。 | %GIT_INSTALL_ROOT%\bin\ssh.exe |
/user_aliases [文件路径] | 指向用户别名的文件路径。 | %CMDER_ROOT%\config\user_aliases.cmd |
/v | 启用详细输出。 | 未设置 |
(自定义参数) | 由cexec 处理的用户定义参数。输入cexec /? 获取更多用法。 | 未设置 |
Cmder Shell用户配置
使用Cmder特定的shell配置文件可以实现单用户便携配置。编辑以下文件以添加您自己的配置:
Shell | Cmder便携用户配置 |
---|---|
Cmder | %CMDER_ROOT%\config\user_profile.cmd |
PowerShell | $ENV:CMDER_ROOT\config\user_profile.ps1 |
Bash/Mintty | $CMDER_ROOT/config/user_profile.sh |
**注意:**Bash和Mintty会话在加载$CMDER_ROOT/config/user_profile.sh
之后,如果$HOME/.bashrc
文件存在,也会加载它。
您可以编写*.cmd|*.bat
、*.ps1
和*.sh
脚本,并将它们放在%CMDER_ROOT%\config\profile.d
文件夹中,以向Cmder添加启动配置。
Shell | Cmder Profile.d 脚本 |
---|---|
Cmder | %CMDER_ROOT%\config\profile.d\*.bat和*.cmd |
PowerShell | $ENV:CMDER_ROOT\config\profile.d\*.ps1 |
Bash/Mintty | $CMDER_ROOT/config/profile.d/*.sh |
Git状态退出选项
要全局禁用Cmder提示符的git状态,请在~/.gitconfig
中添加以下内容,或在单个仓库的[repo]/.git/config
中添加,然后启动新会话。
注意:此配置不可移植
[cmder]
status = false # 为"所有"Cmder支持的shell退出Git状态。
cmdstatus = false # 为"Cmd.exe"shell退出Git状态。
psstatus = false # 为"Powershell.exe"和"Pwsh.exe"shell退出Git状态。
shstatus = false # 为"bash.exe"shell退出Git状态。
别名
Cmder(Cmd.exe)别名
你可以使用类似 alias name=command
的命令为 cmd.exe
会话定义简单的别名。Cmd.exe 别名支持通过 $1-9
或 $*
特殊字符使用可选参数,因此像 vi=vim.exe $*
这样的别名,当输入 vi [filename]
时,将在 vim.exe
中打开 [filename]
。
Cmd.exe 别名也可以更复杂。有关 cmd.exe
复杂别名/宏的更多详细信息,请参见:DOSKEY.EXE 文档。
使用 alias.bat
命令定义的别名将自动保存在 %CMDER_ROOT%\config\user_aliases.cmd
文件中。
要使别名和/或任何其他配置设置永久生效,请将其添加到以下文件之一:
注意:这些文件按以下顺序由 $CMDER_ROOT/vendor/init.bat
加载。存储在 %CMDER_ROOT%
中的任何内容都将成为便携设置,并会随 Cmder 转移到另一台机器。
%CMDER_ROOT%\config\profile.d\*.cmd
和\*.bat
%CMDER_ROOT%\config\user_aliases.cmd
%CMDER_ROOT%\config\user_profile.cmd
Bash.exe|Mintty.exe 别名
Bash shell 原生支持带可选参数的简单和复杂别名,所以它们的工作方式略有不同。输入 alias name=command
将仅为当前运行的会话创建别名。
要使别名和/或任何其他配置设置永久生效,请将其添加到以下文件之一:
注意:这些文件按以下顺序由 $CMDER_ROOT/vendor/git-for-windows/etc/profile.d/cmder.sh
加载。存储在 $CMDER_ROOT
中的任何内容都将成为便携设置,并会随 Cmder 转移到另一台机器。
$CMDER_ROOT/config/profile.d/*.sh
$CMDER_ROOT/config/user_profile.sh
$HOME/.bashrc
如果你将 bash 别名添加到 $CMDER_ROOT/config/user_profile.sh
,它们将是便携的,并在你将 Cmder 文件夹复制到另一台机器时随之转移。在 $HOME/.bashrc
中定义的别名不具有便携性。
PowerShell.exe 别名
PowerShell 原生支持简单的别名,例如 [new-alias | set-alias] alias command
,因此在 PowerShell 会话中不支持带可选参数的复杂别名。输入 get-help [new-alias|set-alias] -full
获取有关 PowerShell 别名的帮助。
要使别名和/或任何其他配置设置永久生效,请将其添加到以下文件之一:
注意:这些文件按以下顺序由 $ENV:CMDER_ROOT\vendor\user_profile.ps1
加载。存储在 $ENV:CMDER_ROOT
中的任何内容都将成为便携设置,并会随 Cmder 转移到另一台机器。
$ENV:CMDER_ROOT\config\profile.d\*.ps1
$ENV:CMDER_ROOT\config\user_profile.ps1
SSH 代理
要启动捆绑的 SSH 代理,只需调用 start-ssh-agent
,它位于 vendor/git-for-windows/cmd
文件夹中。
如果你想在启动时运行 SSH 代理,请在 %CMDER_ROOT%/config/user_profile.cmd
中包含 @call "%GIT_INSTALL_ROOT%/cmd/start-ssh-agent.cmd"
这一行(通常只需取消注释)。
捆绑的 Git
Cmder 默认附带一个捆绑的 Git 安装。每次启动 Cmder 时,都会尝试定位任何其他用户提供的 Git 二进制文件。在找到 git.exe
二进制文件后,Cmder 会通过执行它来进一步比较其版本与捆绑版本。仅当捆绑的 git.exe
二进制文件比用户安装的版本更新时才使用它。
你可以通过将你喜欢的 Git 版本的路径包含在 %PATH%
环境变量中来使用它。此外,Cmder 的 Mini 版本(在下载页面上可找到)不包含任何捆绑的 Git 二进制文件。
在 Cmder 中使用外部 Cygwin/Babun、MSys2、WSL 或 Git for Windows SDK
你可以按照以下说明在 Cmder 中外部运行 bash(Linux、macOS 和 GNU/Hurd 上使用的默认 shell):
- 通过按 Win + Alt + T 设置新任务。
- 点击
+
按钮添加任务。 - 在顶部文本框中命名新任务。
- 提供任务参数,这是可选的。
- 在
命令
文本框中添加cmd /c "[path_to_external_env]\bin\bash --login -i" -new_console
。
推荐的可选步骤:
将 vendor/cmder_exinit
文件复制到 Cygwin/Babun、MSys2 或 Git for Windows SDK 环境的 /etc/profile.d/
文件夹中,以使用 $CMDER_ROOT/config
文件夹中的便携设置。
注意:如果 init 脚本包含 profile.d
,MinGW 可能也能工作,但这尚未经过测试。
目标文件扩展名取决于你在该环境中使用的 shell。例如:
- bash - 复制到
/etc/profile.d/cmder_exinit.sh
- zsh - 复制到
/etc/profile.d/cmder_exinit.zsh
取消注释并编辑脚本中的以下行,以便在从 Cmder 外部启动时也使用 Cmder 配置。
# CMDER_ROOT=${USERPROFILE}/cmder # 如果从 Cmder 启动,则不需要此行。
使用 init.bat
自定义参数来自定义用户会话。
你可以向 init.bat
传递自定义参数,并在 user_profile.cmd
中使用 cexec.cmd
来评估这些参数,然后根据特定标志是否被检测到来执行命令。
init.bat
为在你的配置文件脚本中使用 cexec.cmd
创建了两个快捷方式。
%ccall%
- 评估标志,如果找到则运行命令,然后返回调用脚本并继续执行。
ccall=call C:\Users\user\cmderdev\vendor\bin\cexec.cmd
示例:%ccall% /startnotepad start notepad.exe
%cexec%
- 评估标志,如果找到则运行命令,不返回调用脚本。
cexec=C:\Users\user\cmderdev\vendor\bin\cexec.cmd
示例:%cexec% /startnotepad start notepad.exe
当你有多个任务要执行 cmder
并需要根据所选任务不同地初始化会话时,这很有用。
要在启动特定 cmder
任务时有条件地启动 notepad.exe
:
-
按 win+alt+t
-
点击
+
添加新任务。 -
在
Commands
块中添加以下内容:cmd.exe /k ""%ConEmuDir%\..\init.bat" /startnotepad"
-
在你的
%cmder_root%\config\user_profile.cmd
中添加以下内容:%ccall% "/startNotepad" "start" "notepad.exe"`
要查看 cexec
的详细用法,在 Cmder 中输入 cexec /?
。
将 Cmder 与 Windows Terminal、VS Code 和你喜欢的 IDE 集成
Cmder 默认附带一个作为底层终端模拟器的 ConEmu 安装,如此处所述。
然而,Cmder 实际上可以在各种其他终端模拟器中运行,甚至可以集成到 IDE 中。假设你有最新版本的 Cmder,请按照以下说明让 Cmder 与你自己的终端模拟器一起工作。
有关如何将 Cmder 与你的 IDE 集成的说明,请阅读我们的 Wiki 部分。
升级
升级 Cmder 的过程取决于你当前运行的版本/构建。
如果你有 [cmder_root]/config/user[-|_]conemu.xml
,你正在运行较新版本的 Cmder,请按照以下流程操作:
-
退出所有 Cmder 会话并重新启动
[cmder_root]/cmder.exe
,这会将你现有的[cmder_root]/vendor/conemu-maximus5/conemu.xml
备份到[cmder_root]/config/user[-|_]conemu.xml
。[cmder_root]/config/user[-|_]conemu.xml
包含你使用"设置任务"设置对话框进行的任何自定义设置。
-
退出所有 Cmder 会话,备份你在
[cmder_root]/vendor
下手动编辑的任何文件。- 不建议编辑
[cmder_root]/vendor
下的文件,因为你需要在任何升级后重新应用这些更改。所有用户自定义应放在[cmder_root]/config
文件夹中。
- 不建议编辑
-
删除
[cmder_root]/vendor
文件夹。 -
将新的
cmder.zip
或cmder_mini.zip
解压到[cmder_root]/
,提示时覆盖所有文件。
如果你没有 [cmder_root]/config/user[-|_]conemu.xml
,你正在运行旧版本的 cmder,请按照以下流程操作:
-
退出所有 Cmder 会话,将
[cmder_root]/vendor/conemu-maximus5/conemu.xml
备份到[cmder_root]/config/user[-|_]conemu.xml
。 -
备份你在
[cmder_root]/vendor
下手动编辑的任何文件。- 不建议编辑
[cmder_root]/vendor
下的文件,因为你需要在任何升级后重新应用这些更改。所有用户自定义应放在[cmder_root]/config
文件夹中。
- 不建议编辑
-
删除
[cmder_root]/vendor
文件夹。 -
将新的
cmder.zip
或cmder_mini.zip
解压到[cmder_root]/
,提示时覆盖所有文件。
当前开发版本
你可以通过以下链接访问 AppVeyor 下载当前开发分支的构建:
可以从以下链接下载 GitHub Actions 的最新构建:
许可证
所有包含的软件都附带自己的许可证
MIT 许可证 (MIT)
版权所有 (c) 2016 Samuel Vasko 特此授予任何获得本软件及相关文档文件(以下简称"软件")副本的人免费的许可,可以不受限制地处理本软件,包括但不限于使用、复制、修改、合并、出版、分发、再许可和/或销售本软件的副本,并允许向其提供本软件的人这样做,但须遵守以下条件:
上述版权声明和本许可声明应包含在本软件的所有副本或主要部分中。
本软件按"原样"提供,不提供任何形式的明示或暗示的保证,包括但不限于对适销性、特定用途适用性和非侵权性的保证。在任何情况下,作者或版权持有人均不对任何索赔、损害或其他责任负责,无论是在合同诉讼、侵权行为或其他方面,由本软件或本软件的使用或其他交易引起、由本软件引起或与之相关。