跳转到内容

Midnight Commander

来自 Arch Linux 中文维基


Midnight Commander 是适用于类 Unix 系统的可视化 Shell。它是一种传统(双窗格)文件管理器,支持标准文件操作、虚拟文件系统、外部命令面板化以及用户菜单。它还包含内部查看器 mcview(1)、编辑器 mcedit(1) 和可视化差异工具 mcdiff(1)

基于多功能的文本接口⸺ncurses 或 S-Lang,它可以运行在常规控制台终端模拟器、通过安全外壳协议(SSH)连接的远程 Shell 中。

文档目前仍处于草稿状态。

安装[编辑 | 编辑源代码]

安装 mc,或安装 mc-gitAUR 开发版本。

皮肤[编辑 | 编辑源代码]

Midnight Commander 默认附带多种皮肤。可以在“选项 > 外观”中设置皮肤。

另外也可单独安装第三方皮肤:

  • mc-solarized-gitMidnight Commander 的 Solarized 配色方案
https://github.com/nkulikov/mc-solarized-skin || mc-solarized-gitAUR
  • mc-skin-modarin-debianmodarin 主题的精简版
https://launchpad.net/debian/+source/mc/3:4.8.13-3 || mc-skin-modarin-debianAUR

另见 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 的键(如 F13F20)可通过 Shift 访问。菜单和对话框选项有一个字母高亮,按下该字母(或在文本框中按 Alt+字母)即可直接激活相关选项。

底部显示的是与子 Shell 连接的命令行。此 Shell 通常与启动 Midnight Commander 时使用的类型相同,可以随时切换(Ctrl+o),详见 mc(1) § The subshell support。在该命令行上,cdMidnight 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 中对应部分。建议同时阅读 mceditcooledit 的手册页,或应用补丁

故障排除[编辑 | 编辑源代码]

退出到当前目录[编辑 | 编辑源代码]

退出时,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
提示:#使用 libtrash时,在脚本中添加 unset LD_PRELOAD 以避免冲突。

查找文件无结果[编辑 | 编辑源代码]

如果“查找文件”对话框(快捷键 Alt+?, Esc+?, 或 F9 菜单 > 命令 > 查找文件)未返回结果,检查当前目录下是否存在“符号链接”。“查找文件”不会跟随符号链接,可使用绑定挂载(参见 mount(8))或“外部面板化”命令替代。

快捷键失效[编辑 | 编辑源代码]

某些终端定义(如 screen-256colorxterm-termite)下,快捷键(如 Shift+F6)可能失效或表现异常。可以通过“学习按键”对话框手动分配终端序列。

设置会存储在 ~/.config/mc/ini 文件中,例如对 screen-256color 的设置:

注意:以下示例假设 F13F20 绑定为 Shift+F3Shift+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(“屏幕列表”)文件管理器(“窗格:”)的条目格式也被固定

mcdiff(1)mcedit(1)mcview(1) 不会更改 Xterm 窗口标题