Midnight Commander
Midnight Commander 是面向 类 Unix 系统的可视Shell。它是一个 传统的(双面板)文件管理器,支持标准文件操作、虚拟文件系统、外部命令面板化以及用户菜单。它还包含一个内置的查看器 mcview(1)、编辑器 mcedit(1) 和可视 diff 工具 mcdiff(1)。
由于它基于多功能的文本界面——ncurses 或 S-Lang——它可以在 普通控制台、X Window 终端内、通过 安全 Shell (SSH) 连接,以及所有类型的远程 Shell 上运行。
安装
皮肤
Midnight Commander 默认带有多个皮肤。您可以在 *选项 > 外观* 中设置皮肤。
额外的第三方皮肤可以单独安装
- mc-solarized-git — Midnight Commander 的 Solarized 颜色主题。
- mc-skin-modarin-debian — modarin 主题的精简版本。
另请参阅 mc(1) § Skins。
配置
Midnight Commander 的大部分设置都可以从菜单中更改。但是,少部分设置,如剪贴板命令、代码页检测和外部编辑器的参数,只能从 ~/.config/mc/ini 更改。有关选项的完整描述,请参阅 mc(1) § Special Settings 及后续内容。
此外,还会识别以下环境变量:MC_SKIN、MC_KEYMAP、MC_XDG_OPEN、MC_COLOR_TABLE、MC_DATADIR、MC_PROFILE_ROOT(在 v4.8.19 之前为 MC_HOME)、KEYBOARD_KEY_TIMEOUT_US、PAGER、EDITOR、VIEWER。
另请参阅 mc(1) § FILES。
extfs
extfs 允许为 Midnight Commander 轻松创建新的虚拟文件系统。详情请参阅 /usr/lib/mc/extfs.d/README。
用法
接口
突出显示的是两个垂直面板。其中任何一个都可以列出目录内容、显示纯文本预览、文件详细信息或目录树(请参阅 mc(1) § Directory Tree)。文件操作可以通过功能键或鼠标访问。更多选项可在动态用户菜单 (F2) 和选项菜单 (F9) 中找到。F12 以上的按键(F13 至 F20)可以通过 Shift 键访问。菜单和对话框选项中有一个字母被高亮显示——按下此字母(或在文本输入框内按 Alt+字母)即可直接激活相应的选项。
下方可见一个命令提示符,连接到一个子 Shell。该 Shell 通常与 Midnight Commander 启动时所在的 Shell 类型相同,并且可以随时切换(Ctrl+o),请参阅 mc(1) § The subshell support。在此命令提示符下,cd 由 Midnight Commander 解释,而不是传递给 Shell 执行。因此,特殊的补全(例如来自 Zsh 的补全)不可用。面板中的文件会与命令提示符交互;例如,Alt+Enter 会将(选定)文件的名称复制到命令提示符。
按键绑定通常类似于 GNU Emacs。可以启用更严格的 Emacs 键映射(请参阅 mc(1) § Redefine hotkey bindings)。不过,新用户可以使用类似 Lynx 的(箭头)按键绑定(在 *选项 > 面板选项* 中启用)和鼠标点击进行导航。
Linux 虚拟控制台的鼠标支持可以通过 通用鼠标 启用。
模块
这些可以通过 Midnight Commander 界面(在 *选项 > 配置* 中启用 *使用内置*)调用,或者作为 mc 二进制文件的 符号链接单独调用。
- mcedit(1) — 文本和二进制文件编辑器,支持正则表达式替换、语法高亮、宏和 Shell 管道
- mcview(1) — 文本和十六进制查看器,支持跳转标记和正则表达式搜索
- mcdiff(1) — 比较并就地编辑两个文件(
Ctrl+xd)
每个 Midnight Commander 实例都可以同时运行多个模块,您可以使用 Alt+` 在它们之间切换,请参阅 mc(1) § Screen selector。可以使用外部编辑器代替,并相应配置参数。
技巧与提示
从菜单启动
Midnight Commander(以及 mcedit(1) 及其其他子命令)可以从 应用程序启动器 运行,需要正确的 桌面条目。例如:
[Desktop Entry] Type=Application Version=1.5 Name=Midnight Commander Comment=Visual file manager Exec=mc %f Icon=MidnightCommander MimeType=inode/directory Terminal=true Categories=ConsoleOnly;FileManager;Utility;
随着许多 终端模拟器 获得 D-Bus 激活功能,还可以 创建一个 D-Bus 服务 来触发它们打开一个新标签页/面板并在那里调用 mc,并使用 Systemd 单元作为触发器的监听器。
回收站支持
Midnight Commander 默认 不支持 回收站。
使用 libtrash
安装 libtrashAUR 包,并在您的 Shell 的初始化文件中(例如 ~/.bashrc 或 ~/.zshrc)创建一个 mc 别名:
alias mc='LD_PRELOAD=/usr/lib/libtrash.so mc'
要应用更改,请重新打开您的 Shell 会话或 `source` 您的 Shell 初始化文件。
默认设置在 /etc/libtrash.conf.sys 中定义;默认的回收站目录是 ~/Trash/。您可以在 ~/.libtrash 中覆盖这些用户级设置,例如:
~/.libtrash
TRASH_CAN = .Trash INTERCEPT_RENAME = NO IGNORE_EXTENSIONS= o;exe;com UNCOVER_DIRS=/dev
现在,通过 Midnight Commander 删除的文件将被移至 ~/.Trash/ 目录。
- 从 Midnight Commander 启动的应用程序会继承
LD_PRELOAD,这可能会导致某些应用程序出现问题。 [1] - 当设置了
GLOBAL_PROTECTION = YES(默认值)时,即使在不同分区上,在主目录之外删除的文件也会被移到回收站。根据文件的大小,这可能会导致显著的延迟。
另请参阅 GNOME 邮件列表上的此讨论串。
mcedit 语法高亮
mcedit(1) § SYNTAX HIGHLIGHTING 部分 缺少 man 1 cooledit 的 相应部分 的一些重要信息。请同时阅读 mcedit 和 cooledit 的手册页,或应用 补丁。
故障排除
退出到当前目录
退出时,Shell 会返回到 Midnight Commander 启动时的目录,而不是最后一个活动目录。包含了一个包装脚本,您可以将其添加到您的 ~/.bashrc 或 ~/.zshrc 中:
alias mc=". /usr/lib/mc/mc-wrapper.sh"
对于 fish Shell,请使用此包装器: http://mc-wrapper.fish。将其放置在 ~/.config/fish/functions/mc.fish,或在 fish Shell 中执行其内容,然后运行:
funcsave mc
另一个简单的解决方法是使用子 Shell (Ctrl+o)。但这可能会干扰其他终端应用程序。
屏幕乱码
按 Ctrl+l 重绘显示。这只会重绘,不会刷新(Ctrl+r)文件列表。
打开文件
Midnight Commander 读取 MC_XDG_OPEN 环境变量 来打开文件,当未设置时,默认使用 xdg-open 当 未设置时。
如果 Midnight Commander 被阻塞直到相应进程结束,或者进程与 mc 一同退出,请使用 nohup &
~/bin/nohup-open
#!/bin/bash nohup xdg-open "$@" &
并相应地设置 MC_XDG_OPEN
$ export MC_XDG_OPEN=~/bin/nohup-open
unset LD_PRELOAD。查找文件无结果
如果 *查找文件* 对话框(可以通过 Alt+?、Esc+? 或 *F9 (菜单) > 命令 > 查找文件* 访问)没有显示结果,请检查当前目录是否存在 *符号链接*。*查找文件* 不会跟随 *符号链接*,因此请改用绑定挂载(参阅 mount(8))或 *外部面板化* 命令。
快捷键失效
对于某些终端定义,如 screen-256color 或 xterm-termite,快捷键如 Shift+F6 可能无法工作或表现为不同的组合。为解决此问题,请使用 *学习按键* 对话框手动分配终端序列。
设置将存储在 ~/.config/mc/ini 文件中,例如对于 screen-256color:
F13–F20 绑定到 Shift+F3–Shift+F10。[terminal:screen-256color] f1=\\eOP f2=\\eOQ f3=\\eOR f4=\\eOS f5=\\e[15~ f6=\\e[17~ f7=\\e[18~ f8=\\e[19~ f9=\\e[20~ f10=\\e[21~ f11=\\e[23~ f12=\\e[24~ f13=\\e[1\;2R f14=\\e[1\;2S f15=\\e[15\;2~ f16=\\e[17\;2~ f17=\\e[18\;2~ f18=\\e[19\;2~ f19=\\e[20\;2~ f20=\\e[21\;2~ complete=\\e^i backtab=\\e[Z backspace=^?
Xterm 窗口标题自定义
Xterm 窗口标题 的格式是 硬编码 为 mc [用户名@主机名]:当前/路径,另请参阅 相关工单。
mc(1) § Screen selector(屏幕列表)文件管理器(面板:)条目的格式也是 硬编码 的。
mcdiff(1)、mcedit(1) 和 mcview(1) 完全 不 更改 Xterm 窗口标题。