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(「屏幕列表」)文件管理器(「窗格:」)的條目格式也被固定。