Midnight Commander
Midnight Commander 是适用于类 Unix 系统的可视化 Shell。它是一种传统(双窗格)文件管理器,支持标准文件操作、虚拟文件系统、外部命令面板化以及用户菜单。它还包含内部查看器 mcview(1)、编辑器 mcedit(1) 和可视化差异工具 mcdiff(1)。
基于多功能的文本接口⸺ncurses 或 S-Lang,它可以运行在常规控制台、终端模拟器、通过安全外壳协议(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_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 时使用的类型相同,可以随时切换(Ctrl+o
),详见 mc(1) § The subshell support。在该命令行上,cd 由 Midnight Commander 解释,而不是传递给 Shell 执行。因此,某些特殊补全功能(如 Zsh 提供的功能)不可用。窗格中的文件可与命令行交互,例如,按 Alt+Enter
可将(选中的)文件名复制到命令行。
按键绑定通常类似于 GNU Emacs。可以启用更严格的 emacs 键映射(详见 mc(1) § Redefine hotkey bindings)。新用户也可以使用 Lynx 样式(箭头)键绑定和鼠标点击进行导航。
在 Linux 虚拟控制台中,可以通过 General purpose mouse 启用鼠标支持。
模块[编辑 | 编辑源代码]
可以通过 Midnight Commander 界面调用这些模块(需在“选项 > 配置”中启用“使用内部模块”),或作为 mc 可执行文件的符号链接单独运行。
- mcedit(1) — 文本和二进制文件编辑器,支持正则替换、语法高亮、宏和 Shell 管道
- mcview(1) — 文本和十六进制查看器,带有转到标记和正则搜索
- mcdiff(1) — 对比并就地编辑两个文件(
Ctrl+x
d
)
每个 Midnight Commander 实例可以并行运行多个模块,并使用 Alt+`
切换,详见 mc(1) § Screen selector。也可改用外部编辑器,并相应配置参数。
小技巧[编辑 | 编辑源代码]
从菜单启动[编辑 | 编辑源代码]
可以通过正确的桌面项从菜单启动 Midnight Commander。例如:
[Desktop Entry] Type=Application Version=1.0 Name=Midnight Commander Comment=Visual file manager Exec=mc Icon=folder MimeType=inode/directory Terminal=true Categories=Utility;
垃圾箱支持[编辑 | 编辑源代码]
Midnight Commander 默认不支持垃圾箱功能。
使用 libtrash[编辑 | 编辑源代码]
安装 libtrashAUR 软件包,并在 Shell 的初始化文件(如 ~/.bashrc
或 ~/.zshrc
)中创建一个 mc 的别名:
alias mc='LD_PRELOAD=/usr/lib/libtrash.so mc'
应用更改后,重新打开 Shell 会话或使用 source
重新加载初始化文件。
默认设置定义在 /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) § 语法高亮 部分缺失了部分关键内容,可参阅 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 [2]。
如果 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 [username@hostname]:current/path
,参见对应问题条目。
mc(1) § Screen selector(“屏幕列表”)文件管理器(“窗格:”)的条目格式也被固定。