七种武器之mc

mc 全称是 GNU Midnight Commander,我认为它是自由操作系统下最强的文件管理器,无论是Linux还是FreeBSD均能稳定工作。神奇的是它只是纯字符界面的管理器,体积不过两三兆,却比nautilus, rox, thunar, konqueror 等等都要强大,并且不依赖X环境(不像krusader,且后者不够稳定),真是把ncurse用到了极限。不信么?Windows下的最强文件管理器totalcmd的操作方式跟它可是基本类似噢,虽然我不清楚它们之间的是否很有渊源,但mc提供甚至更加灵活的配置方式,下边先看一份双列显示的截图:

MC filemanager

它默认用到了F1-F10键位,类似totalcmd的键位分别为F3(查看)、F4(编辑)、F5(复制)、F6(移动)、F7(新建目录)、F8(删除)和F1(帮助),另外的几个键位为F2(功能菜单,很强大)、F9(下拉工具栏菜单)和F10(退出)。遗憾的是,mc的键位不能重新自定义。

按F9后在Option(选项)菜单中可以自定义很多设置,比如采用双列还是双行显示,或者采用单列显示;文件排序方式等等。因为mc的功能实在太多,它的manual也很长,这篇文章也说不完整,只挑一些有意思的应用。

mc的动作基本是对当前选中或着tag(标记)过的文件目录进行操作,它的组合键位设置跟GNU Emacs极其类似,如果熟悉Emacs则很容易上手,比如

  • C-x o 更改属性,
  • C-x ! 执行自定义的一些命令,
  • M-! 对当前光标处的文件执行命令,
  • C-x s 创建符号链接,
  • C-x h 把当前目录添加到hotlist(这个类似totalcmd的favorites),
  • C-\ 调用hotlist(类似totalcmd的C-d),
  • M-? 弹出搜索框
  • C-x i 在另一个窗口显示当前项目的属性信息
  • C-x q 在另一个窗口预览当前项目(这个类似totalcmd的quickview, C-q)
  • C-t 标记当前的文件(这个类似totalcmd中的空格选中的作用)
  • C-s 在当前目录检索文件名(totalcmd也有这样的快速定位功能)
  • M-y 返回上一界面
  • M-u 返回下一界面
  • M-<; 移动到列表开头
  • M-> 移动到列表结尾
  • C-x j 查看后台工作进程
  • … 还有我不常用的了,以及我常用F9呼出菜单的操作,比如sort :-P

最后一个强力功能键是 C-o,它让你可以在terminal输出和mc界面之间进行快速切换,你可以理解为是mini-buffer的全屏功能 :)

得一提的是 mini-buffer 里边输入命令的话是可以自动补全的,在控制台模式下直接M-Tab就行,而X环境下这个键位被window switcher占用了,只能用 C-M-i 或者 Esc-Tab 补全命令了。

F2弹出菜单是可以高度定制的,它的配置文件在 ~/.mc/menu,可以参考 /usr/share/mc/mc.menu 这个文件,下边是一个示例:

MC menus

最后应该提及的是,mc的F3(View)和F4(Edit)以及Enter的默认动作都是可以自己在文件 ~/.mc/bindings 中绑定的,并且支持正则表达式,默认的动作绑定在 /usr/share/mc/mc.ext 中。mc是自带 viewer 和 editor 的,能还颇强大,而你可以自己替换它的view和edit,因为音频视频总不能用mcviewer打开视听吧?比如我对一些常见文件类型的操作(注意格式要求是Open, View前面应该空格或者Tab,并且等号两边不能有空格,详细内容请见manual。

另外跟totalcmd类似的是,mc同样内置ftp功能,但是由于它的F3和F4功能更为强大,因此使用的时候也远比totalcmd更顺手。如果是要远程编辑一个ftp上的脚本,那么跟你编辑本地的文件感觉不出丝毫差异,就像挂载上了一个新的文件系统(ftpfs)一样。更绝的是它除了支持ftpfs,还支持tarfs、sshfs、nfs、smbfs等等(顾名思义 :) )。访问方式是这样的,如果你要进入一个ftp,用cd命令就行了,ftp用下边的格式表示:

cd /#ftp:[!][user[:pass]@]machine[:port][remote-dir]

而tar文件,你也可以通过类似的方式,或者干脆直接在文件上enter(回车)就可以进入(因为对 .tar, tar.gz, .tgz 等文件的默认enter操作已经在 mc.ext 中写好了),类似totalcmd下边直接访问压缩文件的样子,是不是非常方便呢?