Please enable Javascript to view the contents

深度定制Cmder

 ·  ☕ 4 分钟

定制 Cmder

定制前的建议:

  • 尽量不要更改 [cmder_root]\vendor 下的文件,cmder升级时它们将被覆盖
  • 确保你的 cmder 是最新版本

建议先安装支持显示那些特殊符号的字体,这样你在配置过程中可以立马看到效果;比如这样设置Cmder的字体:

  • 控制台主要字体:DejaVuSansMono Nerd Font
  • 替代字体: 等距更纱黑体 SC
  • 调大Unicode范围: E0A0; E0B0;

字体这样设置后,基本支持大多数特殊符号,如果想更换配置好后再慢慢调整。

更纱黑体的 GitHub 下载页面

另外可以在这里寻找合适的字体: nerd-fonts/patched-fonts ,Windows系统选择带有 Windows Compatible 后缀的字体,而在这其中 DejaVuSansMono Nerd Font 字体支持的符号最多(比 DejaVu Sans Mono for Powerline 还多) 点此下载

  • DejaVu Sans Mono Nerd Font Complete :选择这类并选择带有 Windows Compatible后缀的字体
  • DejaVu Sans Mono Nerd Font Complete Mono :末尾多了个 Mono,中文会被拉宽

另一个耐看一点的字体是 UbuntuMono NF,但是少了部分符号影响不是很大。

字体也可以使用scoop安装:

1
2
3
4
scoop bucket add nerd-fonts
# 安装对中文支持很好的字体 Sarasa Gothic 
# 必须进行全局安装,否则可能出现权限不够无法安装
sudo scoop install SarasaGothic-SC -g

安装并设置好字体后,我们可以进行下一步操作,配置底层shell的显示和输出

配置 cmd

cmder 通过 clink 和 clink-completions 来增强 底层 cmd。

而 Clink 可以使用 Lua 脚本来进行配置,所以我们主要就是通过编写 Lua 扩展脚本来定制 cmd。

Clink通过注入父进程的方式,让本地 Windows shell cmd.exe 与具备强大的命令行编辑功能的 GNU Readline 库相结合,它提供丰富的完成、 历史和行编辑功能。感兴趣的同学可以看一下 Clink的功能介绍GNU Readline 库

定制命令提示符(Prompt):

提示文本和颜色在 [cmder_root]\vendor\clink.lua 文件中定义,但是我们不建议修改此文件,所以另行创建一个文件:

%cmder_root%\config\my_prompt.lua

该文件内容为:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
-- 文件名和函数命名规则:
-- 文件名为 my_prompt.lua 则函数名需要是 my_prompt_filter()
function my_prompt_filter()
    -- 获取当前工作路径
    cwd = clink.get_cwd()
    -- 这里用于覆盖默认提示符
    -- 包含两个颜色:路径颜色   λ 的颜色
    -- prompt = "\x1b[1;32;40m{cwd} {git}{hg}{svn} \n\x1b[1;30;40m{lamb} \x1b[0m"
    -- 仔细观察会发现存在一个 \n 换行,这也就是为什么 λ 会显示在另一行的原因
    prompt = "\x1b[1;32;40m{cwd} {git}{hg}{svn} \n\x1b[1;30;40m{lamb} \x1b[0m"
    new_value = string.gsub(prompt, "{cwd}", cwd)
    
    -- 你也可以将这里的 λ 符号替换为熟悉的 $ 符号
    clink.prompt.value = string.gsub(new_value, "{lamb}", "$")
end

clink.prompt.register_filter(my_prompt_filter, 1)

颜色由转义序列控制,转义序列由 ESC[ 表示(即esc按键[)在 lua 或 c# 中则写为 \x1b[,在C/C++/Bash 中则写为 \033[ ;完整表示一个颜色的格式为:

1
2
3
4
5
6
7
8
# 在 lua 中
\x1b[XXXm
# 在 C/C++/Python/Bash中(见的最多)
\033[XXXm
# 一般会在末尾使用 0 来清除前面的样式设置
# 这个0这样表示,即将0替换XXX
\x1b[0m
\033[0m

其中 XXX 表示一系列由 ; 分号分隔的参数,它的长度和位置是不确定的,写法有多种,具体参考下面的链接

⭐转义序列 escape sequences ,可以在该地址找到颜色列表和详细的讨论

How to edit prompt for {cmd::CMDER}} ??? · Issue #1425 · cmderdev/cmder

\x1b[4;31;40m 中,4表示下划线,32表示前景色为红色,40表示背景色为黑色(一般保持为黑色),下面有一张表格:

自己设置比较麻烦,我们可以直接下载其他人配置好的 lua 文件,比如下载 cmder-powerline-prompt ,然后将其所有 lua 文件放入 [cmder_root]\config\ 目录中,重启cmder或新建一个cmd标签页查看效果。我们还可以对其进行配置:

  • _powerline_config.lua 文件中配置符号,比如修改 λ ,或者其他配置。

效果如下:

cmder-cmd-20191215162952.png

Prompt 提示符包含了:

  • 符号:比如 λ
  • segment 分段:比如目录分段,Git 仓库分段(在git仓库中时会在提示符末尾附加一段内容)

设置Clink自动应答:

  • 方法一,修改配置文件 [cmder_root]\config\settings 更改以下内容

    # disabled, 1 = answer 'Y', 2 = answer 'N'.
    terminate_autoanswer = 1
    
  • 方法二,直接在cmd中运行命令 clink set terminate_autoanswer 1

配置 PowerShell

请查看我的另一篇文章 PowerShell主题设置

PowerShell下不同主题的效果:powershell-theme01.png

配置 Bash

适用于WSL:

参考我的另一篇文章:Powerlevel9k:zsh下最棒的Powerline主题

WSL bash下的效果:cmder-zsh-p9k-20191215153654.png

添加配色方案(主题)

这种导入主题的方式我是醉了,不建议。

比如添加

建议在刚开始安装cmder时就导入主题,如果在后期再通过导入 xml 文件的方式添加主题会导致当前一些配置被覆盖;这里特别说明。

在导入该主题前,请先将cmder当前设置导出,以进行备份,切记⚠

与 VS Code 无缝集成

设置vs code默认通过Cmder使用 cmd,集成方式:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
  // Cmder  Code 的无缝集成
  "terminal.integrated.shell.windows": "cmd.exe",
  "terminal.integrated.env.windows": {
  "CMDER_ROOT": "[D:\\Scoop\\Applications\\apps\\cmder\\1.3.13]",
  // "CMDER_ROOT": "[%CMDER_ROOT%]"
  },
  "terminal.integrated.shellArgs.windows": [
    "/k",
    // "D:\\Scoop\\Applications\\apps\\cmder\\1.3.13\\vendor\\bin\\vscode_init.bat"
    "%CMDER_ROOT%\\vendor\\bin\\vscode_init.bat"
  ],

我在尝试设置vs code默认终端为 cmd.exe 时总是报错,下面两种错误

The filename, directory name, or volume label syntax is incorrect.
'D:\Scoop\Applications\apps\cmder\1.3.13\vendor\bin\vscode_init.bat' is not recognized as an internal or external command, operable program or batch file.

同样也可以设置 vs code 默认通过 Cmder 使用 powershell

1
2
3
4
5
6
7
  "terminal.integrated.shell.windows": "C:\\WINDOWS\\System32\\WindowsPowerShell\\v1.0\\powershell.exe",

  "terminal.integrated.shellArgs.windows": [
      "-ExecutionPolicy", "Bypass", 
      "-NoLogo", "-NoProfile", "-NoExit", 
      "-Command", ". 'D:\\Scoop\\Applications\\persist\\cmder\\config\\user_profile.ps1'"
  ],

使用 Fluent 替换 ConEmu

Fluent Terminal可以用作ConEmu的替代产品,以启动Cmder。

可以参考:Seamless FluentTerminal Integration - cmder Wiki

参考

您的鼓励是我最大的动力
alipay QR Code

Felix
作者
Felix
如无必要,勿增实体。

3

目录