Комфортная работа в Midnight Commander
Опубликовано 08.09.2011
Многие мои коллеги принципиально игнорируют Midnight Commander, предпочитая работать в командной строке. Мотивируют это целым рядом причин, начиная с «нортон коммандер устарел еще в 1995 году» и заканчивая «я юниксоид с 1970 года и без всяких mc прекрасно управляюсь в консоли». Конечно же, это дело вкуса, и можно (и нужно!) настроить консоль под себя так, чтобы она летала со скоростью мысли: на помощь приходят команда alias, сочетание Ctrl+R, описание команды shopt в builtins(1), пакет bash_completion или его аналоги, ряд мелких хаков, наподобие такого, или альтернатива в виде zsh, в конце концов.
Однако визуалам типа меня удобнее постоянно иметь перед глазами списки файлов и папок, а не помнить, какой файл где находится и что здесь есть еще. Кроме того, пользуясь исключительно командами cd
и ls --color
, можно легко проглядеть что-нибудь ненужное, типа оставшихся от vim бэкапов в текущем каталоге (если бэкапы нужны, см :help backupdir
) или папок с именем из пробела.
Конечно, сначала mc производит немного гнетущее впечатление, но если разобраться и привыкнуть, то может оказаться, что даже с конфигурацией из коробки он очень облегчает жизнь разработчика и системного администратора. Поделюсь собственными хитростями, используемыми каждый день. За кадром осталось еще множество интересных фич, типа кастомной раскраски файлов в панели, смены цветовой схемы на черно-зеленую, сниппетов в редакторе mcedit, настраиваемых VFS, но поскольку я ими не пользуюсь, то ничего про них не скажу. Примеры их настроек и использования можно посмотреть в /etc/mc и в /usr/share/mc.
Сначала полезные мелочи, для многих очевидные.
- Если до mc по каким-то причинам не доходят коды кнопок Fn, их можно заменить Esc-n. А Alt, иногда перехватываемый панелью меню, успешно заменяется кнопкой Esc
- Режим просмотра файлов «Full file list» лучше, чем «Short file list». При желании можно добавить туда показ прав на объекты файловой системы, например:
half type name | size | mtime | mode:3
- Панели подсказок над и под командной строкой внизу и меню сверху можно отключить в Options — Layout, будет больше пространства для списка файлов. Заодно там можно включить отображение свободного места в текущем разделе — очень полезно для нетбуков с мелкими экранами
- При навигации по списку файлов сочетание Ctrl+S перекидывает на файл, начинающийся с вводимых символов
- Alt+Y перекидывает в предыдущую папку. Иногда это бывает полезно при восстановлении после ошибки «The shell is already running the command», за все время существования mc ставшей его визиткой
- Встроенный редактор ужасен. В ~/.bashrc добавьте строчку
export EDITOR=vim
, а в пункте меню Options — Configuration снимите галку «Use internal editor». Точно так же можно использовать переменную окружения PAGER=view для просмотра файлов (опция «Use internal view») - Alt+I покажет текущую папку в противоположной панели, а Alt+O — папку под курсором, а если под курсором файл, то родительскую.
- Начиная с ветки midnight commander 4.7.1, в меню сортировки появилась сортировка по версиям, она работает точно так же, как
ls -v
, т.е. показывает список 1.2.1, 1.2.2, 1.2.10 именно в этом порядке, а не в алфавитном (1.2.1, 1.2.10, 1.2.2). Сам делал :). - Ctrl+X c — просмотр и редактирование прав на файл
- Ctrl+X d — три варианта сравнения двух каталогов: быстрое (по спискам файлов), по размерам (то же самое, только с учетом размеров), полное (по содержимому файлов)
- Alt+C — быстрый переход в нужную папку без изменения командной строки. По Esc-Tab показывает список подстановки (в командной строке mc Esc-Tab тоже иногда работает)
- По Ctrl+\ имеется многоуровневое меню быстрого доступа к папкам, в т.ч. и через FTP и SSH. При желании его можно отредактировать вручную в ~/.mc/hotlist
На данный момент самой полезной фичей для меня является пользовательское меню. Про него я уже писал пару раз (1, 2), сейчас расскажу более подробно.
Я поддерживаю несколько сайтов под mod_perl, и после изменений в коде startup.pl необходимо перезапускать процесс apache, свой для каждого сайта. Каждый сайт находится в /home/sites/sitename, а конфиг apache для этих сайтов — в /usr/local/apache/conf/httpd-sitename.conf.
Когда мне надоело вручную писать /usr/local/apache/bin/apachectl-sitename restart после каждого изменения, в ~/.mc/menu добавились строчки:
s Restart apache for sitename sudo /usr/local/apache/bin/apachectl-sitename restart
Первая строка задаёт быструю клавишу и название пункта меню, а все за ней следующее — команду, в которой можно использовать ряд макро-подстановок:
- %f — имя файла под курсором, %x — расширение, %b — имя файла без расширения
- %d — каталог в активной панели, %D — каталог в неактивной панели
- %t — выбранные файлы в активной панели, %T — в неактивной
и т.д.
Потом появилось еще пять подобных пунктов, для каждого сайта. В конце концов, мне надоело выбирать стрелками нужную команду или искать в длинном списке, какая буква соответствует соответствует нужному пункту. Внимательно перечитав справку, появляющуюся при нажатии F1 в меню F2, добавил еще по строчке к каждому определению пункта меню:
+= d /home/sites/sitename | f httpd-sitename.conf s Restart apache for sitename sudo /usr/local/apache/bin/apachectl-sitename restart
Первый символ «=» означает начало условия, при котором пункт меню становится активным по умолчанию (при вызове меню курсор уже стоит на этом пункте, так что остаётся только нажать Enter); если перед ним стоит +, то пункт появляется в меню только при выполнении этого условия. Следующий символ — тип условия, например:
- f шаблон — имя файла соответствует шаблону (если в начале файла меню не указана опция shell_patterns=0, то под шаблоном имеется в виду шелл-шаблон, в противном случае — регулярное выражение)
- d шаблон — текущий каталог соответствует шаблону
- t type — то, что под курсором, имеет тип:
- n не является директорией
- r обычный файл
- d каталог
- l ссылка
- c последовательное устройство
- b блочное устройство
- f FIFO
- s сокет
- x исполняемый файл
- t отмеченный файл
Различные типы можно комбинировать, например,
t rdl
означает файл, каталог или ссылку - остальные тесты можно подсмотреть в упомянутой справке
Условия можно комбинировать и объединять, например:
# если находимся в папке /home/sites/sitename и под курсором — файл .sql, показать этот пункт меню += d /home/sites/site_name & f *.sql S import sql-file to database sitedb mysql sitedb < %f
Таким образом, приведенный ранее кусок означает «если находимся в каталоге сайта или стоим на конфигурационном файле apache для него, показать команду перезапуска сервера и встать на нее курсором».
Остальное — дело фантазии и техники. Достаточно подумать о том, какие рутинные действия выполняются достаточно часто, и просто автоматизировать их.
Отличные рецепты. Про самописное меню и не подозревал, буду знать на будущее :-)
Добавлю ссылку в пост о клавиатурных сочетаниях mc.
А почему ты стороннюю кнопку для твиттера используешь?
> Добавлю ссылку в пост о клавиатурных сочетаниях mc.
Спасибо.
> а почему ты стороннюю кнопку для твиттера используешь?
нет ни желания снова разбираться в плагинах вордпресс, ни времени написать что-то своё :(
Я смотрю Вы имеете очень хороший опыт работы с mc, может подскажете тогда как можно решить вот такие проблемы:
1. В Ubuntu если загрузиться в консоли (без Xorg) то почему-то не работают некоторые хоткеи, например Shift+F5, Shift+F6 – они срабатывают как будто я просто нажал F5 или F6.
Причем Ctrl+O и комбинации вида Shift+стрелка_вверх работают нормально (т.е. кнопка Shift работают(
2. Если открыть редактирование файла через mcedit (кнопкой F4), то комбинация Ctrl+O работает (отображает содержимое консоли на экране) но не дает ввести команду. В режиме просмотра файла (кнопкой F3) все работает нормально. Эту проблему можно как-то победить?
Сменить на vim просьба не предлагать, я из тех людей для которых vim имеет 2 режима работы :)