Поддержка subshell представляет собой опцию компиляции, совместимую с оболочками bash, tcsh и zsh.
При включенной поддержке subshell Midnight Commander создаёт точную копию вашей оболочки (определённой в переменной окружения SHELL или, если она не задана, в файле /etc/passwd) и запускает её в псевдо-терминале. Вместо запуска новой оболочки для каждой команды введённая команда передаётся в subshell. Это позволяет изменять переменные окружения, использовать функции shell и алиасы, которые сохраняются до выхода из Midnight Commander.
Для пользователей bash команды запуска subshell можно указать в файле ~/.local/share/mc/bashrc, а специальную раскладку клавиатуры — в ~/.local/share/mc/inputrc. Пользователи tcsh могут настроить команды в ~/.local/share/mc/tcshrc.
Во время работы приложения в subshell нажмите C-o, чтобы переключиться обратно в Midnight Commander (текущая команда или приложение приостановится). Если вы прервёте выполнение таким образом, запуск других внешних команд будет невозможен до завершения остановленного процесса.
Ключевой особенностью является то, что подсказка (prompt) в Midnight Commander совпадает с вашей обычной оболочкой.
Дополнительные детали по настройке subshell см. в разделе "Опции запуска".
После установки Midnight Commander в FreeBSD 12 выводится предупреждение о проблемах с subshell при использовании /bin/sh:
Message from mc-4.8.30:
--
Midnight Commander was built with subshell support, which works with most
popular shells, e.g. bash(1), dash(1), tcsh(1), zsh(1), but not sh(1) due
to its lack of "precmd" or equivalent hooks which mc(1) needs to read the
subshell's current directory.
$ env SHELL=/bin/sh mc
common.c: unimplemented subshell type 1
read (subshell_pty...): No such file or directory (2)
Please either use more advanced interactive shell, or start mc(1) with -u
(--nosubshell) switch if you're confined to /bin/sh for some reason.
Как указано в сообщении, при использовании /bin/sh проблему можно обойти запуском с флагом -u (или --nosubshell).
Для понимания терминов вроде precmd hook, subshell support или subshell в Linux множество объяснений доступно в интернете. Также могут быть полезны дополнительные ресурсы.
В ходе использования Midnight Commander можно столкнуться с недокументированным поведением, когда некоторые клавиши не работают как ожидалось:
F1 вызывает справку терминала вместо справки MC;F10 открывает меню "Файл" терминала вместо выхода из MC.В таких случаях попробуйте комбинации Windows+F1 и/или Windows+F10. Это часто связано с настройками терминала: в разделе "Настройки терминала" → "Дополнительно" → "Быстрые клавиши" отключите опции вроде:
После отключения быстрых клавиш F1 и F10 в MC заработают корректно, как описано в справке.
Из полезных фич отметим:
F11 — полноэкранный режим (full screen view);Alt+F10 — развернуть на весь экран.Эти клавиши могут конфликтовать с горячими клавишами окружения рабочего стола или терминала, но это не критично.
Обратите внимание: раскладка клавиатуры (смена языка) влияет на некоторые горячие клавиши! Большинство работают одинаково, но есть исключения.
Чтобы избежать непредсказуемого поведения и точно знать, что клавиша X делает (например, не запускает что-то неожиданное), начните с проверки и распознавания клавиш — об этом далее.
Конфигурация Midnight Commander включает множество настроек, которые невозможно подробно описать в одном разделе. Мы сосредоточимся на распознавании клавиш и нескольких полезных функциях; остальное см. в документации man mc.
Порядок поиска конфигурационных файлов (по справке):
~/.config/mc/;/etc/mc/;/usr/share/mc/.В Debian 10 пользовательские файлы находятся в ~/.config/mc/:
tree -ap ~/.config/mc/
/home/user/.config/mc/
├── [-rw-r-----] hotlist
├── [-rw-r-----] ini
├── [drwx------] mcedit
└── [-rw-r-----] panels.ini
Базовые функции управляются функциональными клавишами F1–F20, работоспособность которых проверяется в меню "Настройка" → "Распознавание клавиш...", как указано в man mc.
Этот пункт открывает диалоговое окно для тестирования клавиш (F1–F20, Home, End), которые не всегда работают в разных терминалах.
В окне отображается таблица с названиями клавиш. Навигация: Tab или клавиши vi (h влево, j вниз, k вверх, l вправо). Нажатие стрелок добавляет пометку OK, позволяя использовать их для перемещения.
Тестируйте каждую клавишу из таблицы. Если она работает, появится OK. Например:
F1 добавляет пометку (если работает);Tab работает всегда.Если клавиша не работает, пометка не появится. Тогда:
Tab);Enter или Пробел;Esc для отмены).Завершив, сохраните настройки в секции [terminal:TERM] файла ~/.config/mc/ini (где TERM — название терминала) или отмените. Если всё работает, сохранение не нужно.
Клавиши F13–F20 по умолчанию связаны с Shift+F3–Shift+F10 и часто дублируют F3–F10. Но они могут иметь дополнительные функции в панелях, редакторе и просмотрщике, например:
less /etc/mc/mc.keymap
...
[main]
...
MenuLastSelected = f19
QuitQuiet = f20
[panel]
...
ViewRaw = f13
EditNew = f14
CopySingle = f15
MoveSingle = f16
DeleteSingle = f18
[editor]
...
SaveAs = f12; ctrl-f2
SearchContinue = f17
MarkColumn = f13
ReplaceContinue = f14
InsertFile = f15
[viewer]
...
SearchContinue = f17; n
[viewer:hex]
...
SearchContinue = f17; n
[diffviewer]
...
EditOther = f14
MergeOther = f15
SearchContinue = f17
Рекомендуется проверить работоспособность основных клавиш в "Настройка" → "Распознавание клавиш...", как описано в man mc.
F11 может быть занята полноэкранным режимом, но работает с Shift+F1. Вы можете явно определить их:
Shift+F1
Shift+F3
Shift+F4
Shift+F5
Shift+F6
Shift+F7
Shift+F8
Shift+F9
Shift+F10
Это добавит секцию в ~/.config/mc/ini:
[terminal:xterm-256color]
f11=\\e[1\;2P
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~
Клавиши дополнительной клавиатуры (*, -, +) могут не работать при активном Num Lock.
Пример успешного распознавания (все клавиши рабочие): Нажмите "Прервать" и переходите к настройкам или изучению горячих клавиш. Также проверьте "Настройки" → "Клавиатура", "Комбинации клавиш", "Раскладка" (часто "Обычный ПК с 105-клавишной (межд.)").
Меню часто используемых каталогов (вызывается сочетанием Ctrl+\) формируется на основе списка записей в файле ~/.config/mc/hotlist. Каждая запись каталога начинается с новой строки и включает метку (ENTRY) и путь к каталогу (URL). Записи можно группировать для удобства.
Пример структуры файла ~/.config/mc/hotlist:
# single entry
ENTRY "/etc" URL "/etc"
# group entrys
GROUP "user"
ENTRY "Home" URL "~/"
ENTRY "Общедоступные" URL "~/Общедоступные"
ENDGROUP
GROUP "admin"
ENTRY "/etc/apache2" URL "/etc/apache2"
ENTRY "/etc/mysql" URL "/etc/mysql"
ENTRY "/var/log" URL "/var/log"
ENDGROUP
Содержимое файла можно подготовить заранее как шаблон. Для пути к домашнему каталогу допустимо использовать сокращение ~/, но только при ручном редактировании. Если добавить путь через меню, ~ автоматически развернется в полный путь (например, /home/user/). Изменения сохраняются при выходе из меню, а резервная копия создается в ~/.config/mc/hotlist.bak. ??
Пользовательское меню вызывается клавишей F2 и содержит команды оболочки, прописанные в файлах ./.mc.menu, ~/.config/mc/menu или системном /usr/share/mc/mc.menu. MC ищет файлы в указанном порядке: сначала локальный ./.mc.menu (если он принадлежит пользователю или root и не доступен для записи всем), затем пользовательский ~/.config/mc/menu, и наконец системный.
Согласно документации (man mc):
Редактирование файлов меню
Файлы меню содержат списки команд для выполнения повторяемых операций. Они создаются и поддерживаются пользователями. Формат всех трех файлов одинаков:
#. При выборе пункта команды копируются во временный файл (обычно в /tmp) и выполняются, поддерживая макроподстановки (см. раздел Макроподстановки).
Уточнения по расположению:
./.mc.menu — действует только в текущем каталоге, перекрывая другие настройки. ~/.config/mc/menu — пользовательский файл для текущего пользователя. /etc/mc/mc.menu (проверьте с locate mc.menu).Пример: Создайте ~/.config/mc/menu с простой командой:
Show shell
echo $SHELL $ENV
Вызовите меню F2, выберите пункт и нажмите Enter. Переключитесь в оболочку (Ctrl+O) и увидите вывод (например, /bin/bash). Вернитесь в панель тем же сочетанием. ?️⚙️
Если стандартные сочетания (например, для копирования/вставки) не работают, их можно переопределить через файлы .keymap.
C-<символ> — удерживайте Ctrl и нажмите <символ> (например, C-f). M-<символ> — удерживайте Alt или Meta (или нажмите Esc, отпустите и нажмите <символ>). S-<символ> — удерживайте Shift и нажмите <символ>.Строки ввода в MC поддерживают горячие клавиши по умолчанию из GNU Emacs. Переопределение описано ниже.
MC сначала загружает встроенные команды, затем /etc/mc/mc.keymap и /usr/share/mc/mc.keymap. Пользовательский файл ищется в порядке:
-K <файл> или --keymap=<файл>. MC_KEYMAP. keymap в секции [Midnight-Commander] конфигурационного файла. ~/.config/mc/mc.keymap.Пути могут быть абсолютными или именами схем (с .keymap или без). Поиск в каталогах: ~/.config/mc/, /etc/mc/, /usr/share/mc/.
Не обязательно копировать весь файл — создайте ~/.config/mc/mc.keymap с нужными секциями, перезапустите MC.
Пример файла ~/.config/mc/mc.keymap для привычных сочетаний копирования/вставки:
[input]
# ...
Delete = delete; ctrl-d
DeleteToWordBegin = alt-backspace
DeleteToWordEnd = alt-d
# Mark =
Remove = ctrl-w
# Cut =
Store = alt-w
# Paste =
Yank = ctrl-y
DeleteToEnd = ctrl-k
[editor]
#Store = ctrl-insert
Store = ctrl-c
#Paste = shift-insert
Paste = ctrl-v
Cut = shift-delete
В секции [input] сохранены оригинальные комбинации из /etc/mc/mc.keymap, а [editor] изменена для удобства. Теперь в редакторе:
Ctrl+C Ctrl+V Shift+Delete
Вставка из внешнего буфера остается на Shift+Insert.
В mcedit различают два понятия:
\n) и создание новой строки. \n).Перенос длинных строк и табуляция в mcedit работают не всегда интуитивно, а документация (man mcedit) неполная. Вот ключевые опции для настройки:
editor_tab_spacing: Задает длину табуляции (по умолчанию 8). Текстовые редакторы и просмотрщики обычно предполагают 8 пробелов. editor_fake_half_tabs: Эмулирует половину таба для программирования с отступами в 4 пробела, но сохраняет реальный таб в 8. При включении вставляются пробелы и обычные табы для оптимального заполнения. editor_word_wrap_line_length: Длина строки для переноса (по умолчанию 72). editor_option_typewriter_wrap: Описывается как "to be described" — активирует перевод (не перенос) текста на новую строку только при наборе, без создания новой строки в существующих файлах.Дополнительно есть переменная wrap_mode (не описана в документации, но подразумевает режим переноса).
Пример секции [Midnight-Commander] в файле ~/.config/mc/ini для настройки:
[Midnight-Commander]
...
use_internal_view=true
use_internal_edit=true
clear_before_exec=true
confirm_delete=true
confirm_overwrite=true
confirm_execute=true
confirm_history_cleanup=true
confirm_exit=false
...
wrap_mode=true
# default: true
editor_fake_half_tabs=false
# default: false
editor_option_typewriter_wrap=true
editor_edit_confirm_save=true
editor_tab_spacing=8
editor_word_wrap_line_length=72
Важные нюансы:
editor_fake_half_tabs=false: Если true, вместо таба вставляются 4 пробела (не 8). editor_option_typewriter_wrap=true: Активирует перевод (не перенос) на новую строку только при вводе текста. При редактировании существующих файлов с длинными строками переноса нет — это важно для файлов конфигурации. editor_tab_spacing=8: Установленное значение делится на 2 для расчета отступов (табуляции).В mcedit нет переноса длинных строк в существующих файлах — только перевод при наборе. ??
Результаты нажатий некоторых горячих клавиш зависят от раскладки клавиатуры (языка). Большинство работают одинаково, но есть исключения.
В справке MC упоминается "Meta" (примеры: Meta+Shift+?). Это:
Esc (Escape).Пример: Meta+Shift+? — нажмите Esc или Alt, затем Shift+?.
Подсказки используют сокращения:
C-x t: Нажмите Ctrl+x, затем t (например, для копирования помеченных файлов в командную строку). M-!: Нажмите Esc (Meta), затем Shift+! (для вывода команды в окне просмотра).Все подсказки хранятся в файле /usr/share/mc/hints/mc.hint.ru (для русской локали).
M-Enter
Копирует подсвеченное имя файла или каталога в командную строку.
C-Enter
Аналогично M-Enter, но работает только в консоли Linux.
M-Tab
Пытается выполнить автодополнение (completion) имени файла, команды, переменной, имени пользователя или хоста, в зависимости от контекста ввода.
C-x t
Копирует в командную строку имена помеченных файлов из активной панели (если нет помеченных — копирует подсвеченное имя).
C-x C-t
Аналогично, но копирует из пассивной панели.
C-x p
Копирует в командную строку имя текущего каталога (активной панели).
C-x C-p
Копирует имя каталога пассивной панели.
C-q
Команда "quote" — вставляет символы, которые MC обычно интерпретирует (например, +), буквально.
M-p, M-n
Навигация по истории команд: M-p — предыдущая команда, M-n — следующая.
M-h
Выводит историю текущей строки ввода.
M-w (копировать) и C-y (вставить). C-w не копирует, а удаляет выделенный текст (возможно, вырезает в системный буфер, но это не документировано). gpm (mouse server) не решает проблему.
~/.local/share/mc/mcedit/mcedit.clip
Этот файл используется и для командной строки, и для встроенного редактора mcedit.
| Действие | Команда | Примечание |
|---|---|---|
| Скопировать выделенное во внутренний буфер MC |
M-w
|
Работает только в пределах MC |
| Вставить из внутреннего буфера |
C-y
|
|
| Удалить выделенное (вырезать) |
C-w
|
Удаляет, копирования в внешний буфер нет |
| Вставить из внешнего буфера |
Shift+Insert
|
Работает |
| Скопировать во внешний буфер | — | Не реализовано в MC |
На момент версии Midnight Commander 4.8.22 нет стандартного способа скопировать текст из командной строки MC во внешний буфер обмена, чтобы он был доступен другим приложениям. Это ограничение связано с особенностями терминала и самого MC.
Если требуется работа с системным буфером, рекомендуются внешние средства (например, использование терминальных мультиплексоров с поддержкой буфера — tmux, screen — или внешних программ для копирования/вставки).
Midnight Commander включает собственный текстовый редактор mcedit, который можно запустить из интерфейса MC клавишей F4 или отдельно из командной строки:
mcedit [--bcCdfhstVx?] [+lineno] file
где:
file — путь к редактируемому файлу,+lineno — переход к указанной строке,-b — чёрно-белый режим,-C <keyword>=<FGcolor>,<BGcolor>:... — пользовательская цветовая схема,-d — отключение мыши,-f — указание расположения MC,-V — вывод версии программы.Поскольку mcedit — это текстовый редактор, основное внимание уделим операциям копирования, вырезания и вставки текста, оставляя ввод символов базовым навыкам.
Согласно man mcedit (раздел KEYS), в редакторе доступны следующие сочетания:
~/.cache/mc/mcedit/mcedit.clip,В Debian 10 и аналогичных системах файл буфера находится не в ~/.cache/mc/mcedit/mcedit.clip, а в:
~/.local/share/mc/mcedit/mcedit.clip
Чтобы проверить работу буфера, можно следить за содержимым этого файла командой:
tail -f ~/.local/share/mc/mcedit/mcedit.clip
В терминале xfce4-terminal наблюдаются следующие эффекты:
При этом:
Выделение текста мышью или Shift + стрелки, затем переход к месту вставки и нажатие F5.
Этот способ работает с внутренней оперативной памятью MC и не обновляет файл буфера mcedit.clip.
Через меню редактора (F9) выбрать пункт:
В xterm:
Таким образом, Shift-Ins не работает согласно документации ни в одном из терминалов — вставка из внутреннего буфера файла не реализована.
Ctrl-Ins в некоторых терминалах связана с особенностями их обработки клавиш.Редактор не выполняет автоматический перенос длинных строк при открытии или редактировании уже существующего текста. Перенос строки происходит только при ручном вводе (нажатии Enter). Это важно учитывать при работе с конфигурационными файлами и текстами с длинными строками.
Таким образом, несмотря на заявленные возможности, работа с буфером обмена в mcedit зависит от терминала и требует применения обходных методов для эффективного редактирования.
~/.config/mc/hotlist.Более детальные горячие клавиши описаны в справке MC:
ru/doc/common/hotkeys — Общие горячие клавиши MC.ru/doc/editor/hotkeys — Клавиши для встроенного редактора.ru/doc/filePanels/hotkeys — Клавиши для работы с файловыми панелями.Это не полный список — расширенный перечень, включая комбинации для командной строки оболочки, доступен в man mc или в файле /usr/share/mc/help/mc.hlp.ru.
Внутренний буфер обмена MC (хранится в файле ~/.local/share/mc/mcedit/mcedit.clip) по умолчанию не синхронизирован с внешним буфером операционной системы. Это значит, что скопированный текст в MC не будет автоматически доступен в других приложениях, таких как браузеры или текстовые редакторы. Чтобы устранить этот разрыв и обеспечить автоматическую синхронизацию, можно использовать инструмент entr для мониторинга изменений в файле буфера MC и передачи содержимого в системный буфер с помощью xclip.
Вот два варианта команд для настройки автоматической синхронизации:
Мониторинг конкретного файла буфера:
ls ~/.local/share/mc/mcedit/mcedit.clip | entr xclip -i -sel clip ~/.local/share/mc/mcedit/mcedit.clip
Эта команда отслеживает изменения в файле mcedit.clip и при каждом обновлении копирует его содержимое в системный буфер обмена (clip).
Мониторинг с поиском файла:
find ~/.local/share/mc/mcedit -name mcedit.clip | entr xclip -i -sel clip ~/.local/share/mc/mcedit/mcedit.clip
Аналогично первому варианту, но использует find для поиска файла, что полезно, если путь может варьироваться.
Эти команды требуют установки entr (для мониторинга) и xclip (для работы с буфером). Запускайте их в фоне или добавьте в скрипт автозапуска, чтобы синхронизация работала постоянно. Это особенно удобно при частом копировании текста между MC и другими программами.
Работа с MC часто включает доступ к файлам, каталогам и истории команд, что делает вопросы конфиденциальности актуальными. Программа хранит историю действий в файле ~/.local/share/mc/history, а также взаимодействует с системной историей оболочки (например, ~/.bash_history и ~/.bash_aliases). Эти данные могут содержать чувствительную информацию, такую как пути к файлам, пароли или логины, если они вводились в командной строке.
Чтобы минимизировать риски утечки, регулярно очищайте историю MC и связанные файлы. Для автоматизации можно настроить скрипт, который удаляет старые записи. Альтернативно, храните конфигурационные файлы MC на защищённых носителях, таких как виртуальные зашифрованные диски (например, с помощью LUKS или VeraCrypt), и создайте символические ссылки после монтирования:
ln -sf /mnt/mydata/.config/mc ~/.config/mc
ln -sf /mnt/mydata/.local/share/mc ~/.local/share/mc
Это перенаправит хранение истории и настроек на внешний зашифрованный раздел, защищая данные от несанкционированного доступа. Если раздел не смонтирован, MC будет использовать локальные файлы по умолчанию, но без чувствительной информации.
Дополнительные рекомендации:
~/.cache/mc), где могут храниться временные данные.Подробности о настройках безопасности MC можно найти в man mc или в разделе "Options" меню программы.
Вы должны авторизоваться, чтобы оставлять комментарии.
Комментарии ()