Я очень трепетно отношусь к текстовым редакторам. Ведь текстовый редактор входит в тройку самых часто используемых инструментов для работы на компьютере. Делят с ним пальму первенства только файловый менеджер и веб-браузер.
Моим первым текстовым редактором, в котором я написал километры ассемблерного кода, был редактор ED*МИКРОН*, который работал на ПК "Микроша" - клоне радиолюбительского компьютера Радио-86 РК. У этого ПК было 32Кб оперативной памяти и микропроцессор, работавший на заниженной частоте в 1,8МГц. Несмотря на такие скромные характеристики, редактор текстов был не строковым, а полноэкранным. Конечно, аппаратные ограничения диктовали свой стиль построения пользовательского интерфейса. Он был минималистичным, и весь состоял из сочетаний клавиш, выполняющих те или иные действия. Никакой подсказки небыло (ведь память надо было экономить), и для того, чтобы редакторировать текст, надо было знать КАК редактором пользоваться. Иначе ничего не отредактируешь. В редакторе было три режима работы - режим набора, режим редактирования и режим поиска. Не правда ли, это так похоже на раритетный редактор VI/VIM, которой "только пищит и портит текст"?
Во времена DOS я активно использовал текстовый редактор из состава DosNavigator. По сравнению с ED*МИКРОН* это была просто сказка наяву. Обычно я использовал его для обработки небольших текстовых файлов. А для редактирования больших файлов запускал консольный MultiEdit. Оба эти редактора объединяла хорошо продуманная ориентация на пользователя. Изучить все возможности редактора было очень легко в процессе использования. Все действия, дотупные из в меню, имели подсказку по горячим клавишам, и через пару дней работы можно было быстро и качественно править тексты. К тому же эти редакторы создавались во времена, когда интернета небыло. И посему, полноразмерная система помощи была встроена в редактор, и что самое интересное - была актуальной. Самое главное, что было присуще этим обоим DOS-овым редакторам - это предсказуемость в работе, быстрота запуска и мгновенная скорость открытия файла.
Сейчас я использую для работы ОС Linux. И скажу так - на 2014 год под Linux еще не появилось ни одного нормального консольного текстового редактора. Во многом это произошло потому, что эмуляторы терминала (в простонародье - консоль) под *NIX имеют весьма специфическую реализацию, ограниченную исторически сложившимися требованиями к знако-символьным устройствам. Пара проблем, для иллюстрации:
- Функции отрисовки сомволов по нужным координатам очень медленные. А согласно Unix Way, пользоваться прямой работой с видеопамятью текстового режима, как это повсеместно делалось в DOS, в терминале нельзя.
- Нет никакой возможности отправить нажатие клавиши-модификатора (Alt / Ctrl / Shift) в терминал. Модификатор передается только в момент отправки основного символа.
Поэтому, и в силу других причин, для Linux появилась только одна более-менее стоящая библиотека текстового режима - NCurses. Других альтернатив для организации пользователь-ориентированного интерфейса в консоли под Linux просто нет. И поэтому все попытки создать удобный тектовый редактор заканчиваются созданием уродливого поделия, которое не решает проблемы пользователя, а загоняет его в рамки, созданные ограничениями платформы. Скажем точнее - созданные историческими ограничениями платформы, которые в настоящий момент практически не имеют никакого смысла, но влияют на архитектуру создаваемых приложений.
Я долго мучался, пытаясь привыкнуть хотя бы к одному консольному редактору в Linux. Основные требования у меня были следующие - предсказуемость интерфейса и возможность работы со стандартными сочетаниями клавиш. То есть, мне нужно, чтобы текст выделялся по Shift+стрелки, копирование было по Ctrl+C, вставка по Ctrl+V, отмена по Ctrl+Z и т. д. Всё. Однако ни один из опробованных редакторов оказался не способен удовлетворить таким минимальным требованиям. Я научился снимать биндинг с сочетаний Ctrl+C / V / X в консоли, чтоб освободить это сочетание для действий копипаста. Я измучил себя mcedit-ом, vim-ом, jed, nano, тратил время на настройку emacs, спрашивал советов на ЛОРе. В результате понял одно - ну нет под Linux нормального текстового редактора. Нет его. Хочешь редактировать тексты в Linux - или мучай мозг совершенно различными комбинациями клавиш: в консоли - одни, в и DE-шном окружении - другие, или используй редакторы с GUI. Третьего не дано.
Хотя нет, третье было. Я несколько лет использовал редактор Far под Wine! Когда я от отчаяния решился на такое, и увидел, что оно вполне работоспособно, я написал на ЛОРе следующий восторженный пост:
Десять лет, проведенные в линухе, омрачались многими вещами. Но самая мрачная вещь - это отсутствие удобного и понятного консольного текстового редактора.
Я дважды серьезно приступал к изучению vi, проходил встроенный туториал, записывал на бумажечку выученные команды. Но после небольших перерывов, начисто забывал что и как надо делать, помнил только спасительную комбинацию ":qEnter" чтоб выйти из этого ужосо. Я пробовал использовать emacs -nw, но это звиздец еще похуже vi. Чтобы в нем вызвать меню, или просто выйти из программы - нужно прочитать документацию, написанную абсолютно невменяемыми людьми. Другие редакторы, типа nano и jed - по факту являтся наколенными поделиями людей, которые совершенно не представляют себе, что значит пользовательский интерфейс.
Посему, за неимением альтернативы, приходилось пользоваться встроенным редактором Midnight Commander. Он, конечно, далек от идеала, но в нем хотя бы есть меню, через которое всегда можно выполнить редкие действия, и кривая строка подсказки по клавишам.
Я думал, что уже никогда не увижу человечного консольного редактора в линухе. И вот недавно мне в голову пришла мысль - а почему бы не воспользоваться встроенным редактором FAR, запустив его через wine? И произошло чудо - FAR действительно имеет опции, чтобы запускаться как редактор для указанного файла.
Я скачал FAR2 с офицального сайта, распаковал его в каталог /opt/far2, и с трепетом ввел команду:
wineconsole --backend=user /opt/far2/Far.exe /e myfile.txt 2>/dev/null
Господи! Я плакал! Все работает, просто абсолютно все!! Без всяких плясок с бубном! И какнадо!!!111 Всего не перечислишь, вот только то, что пишу навскидку:
- Работает выделение Shift+Стрелки.
Привет MC с его F3, и допиливание Konsole!
- Работает вертикальное выделение Alt+Стрелки.
Привет глюкам MC, в котором после вертикального выделения не поднять курсор выше отметки выделения.
- Полная интеграция с буфером обмена десктоп-окружения.
Привет обмену через cooledit.clip, через который невозможно засунуть и принять в DE-шный буфер обмена кириллицу. Досвидания кривой xclip!
- Возможность копирования в буфер обмена даже невидимого текста.
Ну да, выделяешь текст (пусть он даже вылазит за экран), нажимаешь Ctrl+C и текст в буфере. Это можно сделать не только в редакторе, но и в любом поле ввода. И в любом поле ввода можно сделать Ctrl+V, а не нажимать консольное сочетание «Вставка из буфера», специально для такого случая.
- Отмена действия и выход из редактора - одинарное нажатие Esc.
Досвидания двойным Esc в MC. Допиливать до одинарного нажатия нужды нет.
- Работает копи-паст по привычным сочетаниям Ctrl+C/Ctrl+V.
Досвидания F5, F6, F8 в MC, из-за которых по привычке невозможно работать в других DE-редакторах.
- Работает интеллектуальное Undo по привычному сочетанию Ctrl+Z.
Досвидания посимвольное Undo в MC по C-u.
- Есть грамотно отформатированная справка по всем клавиатурным сочетаниям, вызываемая по F1.
Досвидания кривая справка MC, в которой сочетания нужно выискивать в тексте. Досвидания сочетания вида «M-e» и «F17».
- Работает сохранение по F2 без вопроса «Действительно сохранить?»
Досвидания привычка тыкать F2 - Enter в MC.
- При нажатии Ctrl или Alt нижняя строка подсказки сразу показывает, какие действия будут выполняться при нажатии F1-F10.
Понимаю, понимаю, в консоли одиночные нажатия клавиш-модификаторов отследить проблематично.
- Безупречно работает автоопределение кодировки файла.
Еще ни разу не пришлось вручную перетыкать UTF-8, KOI-8 и CP1251. Просто открываешь файл и редактируешь.
- Замечательно работает подсветка синтаксиса через Colorer.
Досвидания кривая подсветка в MC, в которой при редактировании html-видов в файлах с расширением .php, требуется обязательное наличие тегов <?php ?>, а без них - каша.
- Работает быстрое перемещение к началу/концу текста по Ctrl+UP/Ctrl+Dn.
А в MC это давно и успешно разломали.
- Не возникает «лесенки» при вставке текста.
Досвидания http://www.midnight-commander.org/ticket/1603
- Не теряются символы переноса строк.
А в MC никогда на угадаешь, когда вставленный текст вставится в одну строку.
Чего не хватает? Ну да, единственной вещи - работы в консольном бакэнде. Пользоваться FAR в wine с опцией "--backend=curses" не представляется возможным.
Я прописал встроенный редактор FAR в качестве редактора в MC. Конечно, открытие нового окна с редактируемым текстом меня не радует. Хотелось бы, чтоб редактор был действительно консольным. Зачем, спрашивается, было огород городить, если с таким же успехом можно вызывать нативный Kate?
Но скажу честно - Kate не предназначен для работы через клавиатуру. А встроенный редактор FAR - предназначен. Так что я уже две недели работаю с FAR-редактором и не нарадуюсь. Поначалу раздражало новое окно, и чуть тормозной запуск (около 1 сек против мгновенного запуска встроенного MC редактора), но щас привык, и выгода от удобства редактирования налицо. Я наконец-таки начал комфортно и быстро редактировать текст. Чего и вам желаю.
Всем красноглазам привет.
Почему же я решил отказаться от FarEdit под Wine? Впринципе, меня в FarEdit всё устраивает. Решительно всё. Не устраивает только качество эмуляции самого Wine. На поверку оказалось, что консоль Wine не успевает за моей скоростью работы, и время от времени сегфолтится. Обычно эти сегфолты происходят при активной работе с клавишами-модификаторами. Сегфолты редки, но они есть. И это начинает утомлять, особенно когда перелопачиваешь большие объемы текста. Неприятно, знаете ли, десять минут править файл, и вместо сохранения результатов работы получить сегфолт.
Поэтому, коль уж мечте о консольном редакторе в Linux не суждено осуществиться, и даже FarEdit создает отдельное окно консольного бакэнда, то надо найти удобный GUI-редактор, заточенный на работу с клавиатурой.