Различия
Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
wiki:joe [2010/07/30 21:12] |
wiki:joe [2021/01/06 01:36] заменён тег Редакторы_текста на Текстовый_редактор |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
- | ======Текстовый редактор joe ====== | + | ======Редактор joe ====== |
+ | <style right> | ||
//Автор: Алексей Федорчук | //Автор: Алексей Федорчук | ||
2001-2002 гг // | 2001-2002 гг // | ||
+ | </style> | ||
+ | |||
+ | {{:wiki:joe.png?350 }} | ||
+ | |||
Эта статья была написана достаточно давно, по данным для joe версий 2.8.X-2.9.X. До недавнего времени ее нельзя было считать устаревшей, так как проект joe практически не развивался. Однако последнее время в нем наметилась определенная активность, ознаменовавшаяся выходом версий серии 3.X. Которые привнесли, кроме нескольких мелких усовершенствований, два кардинальных новшества - подсветку синтаксиса и возможность работы с кодировкой UTF-8. В результате чего исходно хороший редактор стал еще лучше... | Эта статья была написана достаточно давно, по данным для joe версий 2.8.X-2.9.X. До недавнего времени ее нельзя было считать устаревшей, так как проект joe практически не развивался. Однако последнее время в нем наметилась определенная активность, ознаменовавшаяся выходом версий серии 3.X. Которые привнесли, кроме нескольких мелких усовершенствований, два кардинальных новшества - подсветку синтаксиса и возможность работы с кодировкой UTF-8. В результате чего исходно хороший редактор стал еще лучше... | ||
**Текстовый редактор joe** - типичный представитель консольных редакторов командного стиля, то есть ориентированных не на действие через меню, а на управление с помощью прямых директив. Название его можно перевести примерно как "редактор дядюшки Джо". Он создан Джозефом Алленом (Joseph H. Allen) при участии Ларри Форда (Larry Foard) и Гари Грея (Gary Gray). Это - открытая и бесплатная программа, доступная в исходниках на http://joe.sourceforge.net. Она реализована для всех, насколько я знаю, Unix- и Unix-подобных систем. А некоторые конкретные врсии были собраны для Windows всякого рода и даже для DOS. | **Текстовый редактор joe** - типичный представитель консольных редакторов командного стиля, то есть ориентированных не на действие через меню, а на управление с помощью прямых директив. Название его можно перевести примерно как "редактор дядюшки Джо". Он создан Джозефом Алленом (Joseph H. Allen) при участии Ларри Форда (Larry Foard) и Гари Грея (Gary Gray). Это - открытая и бесплатная программа, доступная в исходниках на http://joe.sourceforge.net. Она реализована для всех, насколько я знаю, Unix- и Unix-подобных систем. А некоторые конкретные врсии были собраны для Windows всякого рода и даже для DOS. | ||
Строка 34: | Строка 39: | ||
Таковы возможности справочной системы joe по умолчанию. Как будет показано ниже, пользователь может не только изменять имеющиеся секции, но и создавать собственные, в любом количестве и для любых целей. | Таковы возможности справочной системы joe по умолчанию. Как будет показано ниже, пользователь может не только изменять имеющиеся секции, но и создавать собственные, в любом количестве и для любых целей. | ||
Если мне удалось убедить читателя, что joe - вещь стоящая, имеет смысл подробнее ознакомиться с его характерными особенностями. | Если мне удалось убедить читателя, что joe - вещь стоящая, имеет смысл подробнее ознакомиться с его характерными особенностями. | ||
- | |||
=====Характерные особенности ===== | =====Характерные особенности ===== | ||
Для эффективного использования joe следует четко уяснить, что это - командный редактор в чистом виде. То есть все действия по редактированию текста осуществляются соответствующими встроенными командами, к которым привязаны комбинации клавиш. В сущности, как будет показано ниже, это - макросы на собственном языке **joe**. Из чего следует, что, с одной стороны, система команд может быть сколь угодно наращена, с другой - что клавишные комбинации для них могут быть переопределены произвольным образом. | Для эффективного использования joe следует четко уяснить, что это - командный редактор в чистом виде. То есть все действия по редактированию текста осуществляются соответствующими встроенными командами, к которым привязаны комбинации клавиш. В сущности, как будет показано ниже, это - макросы на собственном языке **joe**. Из чего следует, что, с одной стороны, система команд может быть сколь угодно наращена, с другой - что клавишные комбинации для них могут быть переопределены произвольным образом. | ||
Строка 40: | Строка 44: | ||
Полный список встроенных команд и привязанных к ним клавишных комбинаций дан в заключительном разделе этой статьи. | Полный список встроенных команд и привязанных к ним клавишных комбинаций дан в заключительном разделе этой статьи. | ||
- | Здесь же я приведу только основные примеры. | + | Здесь же я приведу только основные примеры. Комбинация |
- | **Комбинация Control+B (от backward) перемещает курсор на один знак влево, | + | * **Control+B** (от backward) перемещает курсор на один знак влево, |
- | Control+F (от forward) - на один знак вправо, | + | * **Control+F** (от forward) - на один знак вправо, |
- | Control+Z - переход к предыдущему слову, | + | * **Control+Z** - переход к предыдущему слову, |
- | Control+X - к последующему слову, и так далее. ** | + | * **Control+X** - к последующему слову, и так далее. |
В некоторых случаях в качестве управляющей клавиши используется клавиша Meta (напомню, что ее эквивалент - нажатие и отпускание клавиши Escape): если в комбинации | В некоторых случаях в качестве управляющей клавиши используется клавиша Meta (напомню, что ее эквивалент - нажатие и отпускание клавиши Escape): если в комбинации | ||
- | **Meta+W - курсор переместится на строку вверх, | + | * **Meta+W** - курсор переместится на строку вверх, |
- | Meta+Z - на строку вниз.** | + | * **Meta+Z** - на строку вниз. |
Кроме того, Meta служит для вызова проверки правописания для слова (Meta+N) и всего файла (Meta+L). Нажатие клавиши Meta два раза подряд приводит к установке закладки (bookmark), которая маркируется произвольной цифрой, а Meta+# (где # - эта самая цифра) вызывает переход к установленной закладке. Правда, очевидно, что закладок не может быть больше 10; и к тому же по завершении сеанса они не сохраняются. | Кроме того, Meta служит для вызова проверки правописания для слова (Meta+N) и всего файла (Meta+L). Нажатие клавиши Meta два раза подряд приводит к установке закладки (bookmark), которая маркируется произвольной цифрой, а Meta+# (где # - эта самая цифра) вызывает переход к установленной закладке. Правда, очевидно, что закладок не может быть больше 10; и к тому же по завершении сеанса они не сохраняются. | ||
- | Все клавишные комбинации в joe не чувствительны к регистру, причем не только для буквенных, но и символьных клавиш. Так, для отмены последней операции (как уже говорилось, многоуровневой) зарезервирована комбинация | + | Все клавишные комбинации в joe не чувствительны к регистру, причем не только для буквенных, но и символьных клавиш. Так, для отмены последней операции (как уже говорилось, многоуровневой) зарезервирована комбинация **Control+_** (знак подчеркивания), а для возврата отмененного действия — **Control+^** oднако в первом случае работает также комбинация **Control+-** (дефис или минус), во втором - **Control+6**. |
+ | Кроме того, все двухклавишные комбинации не чувствительны и к раскладке клавиатуры: сочетание клавиш, например, **Control+T** будет вызывать систему настройки joe и при кириллической раскладке. Интересно, что для пролистывания страниц помощи вперед и назад при кириллической раскладке следует нажимать Escape и точку (или, соответственно, запятую) также в ее положении на русифицированной клавиатуре (то есть в нижнем правом углу для Windows-клавиатур и на верхнем регистре цифр 5 и 7, если мне не изменяет память, - для клавиатур с DOS-маркировкой). | ||
+ | Для более сложных или редких действий используются трехклавишные комбинации. Это почти исключительно одновременно нажатые **Control+K**, после чего нажимается литерная клавиша. Так, операции с блоками осуществляются следующим образом: | ||
- | **Control+_ (знак подчеркивания), а для возврата отмененного действия — Control+^;** | + | * **Control+K** - B отмечает начало выделяемого блока, |
- | однако в первом случае работает также комбинация Control+- (дефис или минус), во втором - Control+6. | + | * **Control+K** - K - его конец, |
- | Кроме того, все двухклавишные комбинации не чувствительны и к раскладке клавиатуры: сочетание клавиш, например, Control+T будет вызывать систему настройки joe и при кириллической раскладке. Интересно, что для пролистывания страниц помощи вперед и назад при кириллической раскладке следует нажимать Escape и точку (или, соответственно, запятую) также в ее положении на русифицированной клавиатуре (то есть в нижнем правом углу для Windows-клавиатур и на верхнем регистре цифр 5 и 7, если мне не изменяет память, - для клавиатур с DOS-маркировкой). | + | * **Control+K** - C - копирует, |
- | Для более сложных или редких действий используются трехклавишные комбинации. Это почти исключительно одновременно нажатые Control+K, после чего нажимается литерная клавиша. Так, операции с блоками осуществляются следующим образом: | + | * **Control+K** - M - перемещает выделенный блок в позицию курсора |
- | **Control+K - B отмечает начало выделяемого блока, | + | и так далее. Трехклавишные комбинации также не чувствительны к регистру. И работают также и при кириллической раскладке клавиатуры. В этом случае только необходимо нажимать вторую литерную клавишу вместе с той же клавишей Control: то есть запись текущего файла при включении кириллической раскладки потребует комбинации **Control+K - Control+D**, вызов нового файла - **Control+K - Control+E**, и так далее. |
- | + | ||
- | Control+K - K - его конец, | + | |
- | + | ||
- | Control+K - C - копирует, | + | |
- | + | ||
- | Control+K - M - перемещает выделенный блок в позицию курсора, ** | + | |
- | + | ||
- | и так далее. Трехклавишные комбинации также не чувствительны к регистру. И работают также и при кириллической раскладке клавиатуры. В этом случае только необходимо нажимать вторую литерную клавишу вместе с той же клавишей Control: то есть запись текущего файла при включении кириллической раскладки потребует комбинации Control+K - Control+D, вызов нового файла - Control+K - Control+E, и так далее. | + | |
В joe нет отдельной функции для переименования файла. Но при любой записи текущего документа следует запрос на подтверждение имени файла, изменить которое при этом никто не запрещает. Следует только помнить, что дальнейшая работа происходит с исходным, а не | В joe нет отдельной функции для переименования файла. Но при любой записи текущего документа следует запрос на подтверждение имени файла, изменить которое при этом никто не запрещает. Следует только помнить, что дальнейшая работа происходит с исходным, а не | ||
переименованным файлом. | переименованным файлом. | ||
Кроме того, в joe доступны еще некоторые действия с файлами. Так, комбинация | Кроме того, в joe доступны еще некоторые действия с файлами. Так, комбинация | ||
- | **Control+K - R вставляет текст из существующего файла в позицию курсора, | + | * **Control+K - R** вставляет текст из существующего файла в позицию курсора, |
- | Control+K - W - записывает выделенный блок в виде нового файла (разумеется, запросив предварительно его имя). | + | * **Control+K - W** - записывает выделенный блок в виде нового файла (разумеется, запросив предварительно его имя). |
- | С помощью комбинации Control+K - E можно открыть для редактирования другой существующий файл. ** | + | * **Control+K - E** можно открыть для редактирования другой существующий файл. |
При этом следует предложение ввести путь и имя, причем и для того, и для другого работает режим дополнения клавишей табуляции, как в командных средах bash или tcsh. | При этом следует предложение ввести путь и имя, причем и для того, и для другого работает режим дополнения клавишей табуляции, как в командных средах bash или tcsh. | ||
Между одновременно открытыми файлами возможен обмен данными: или с помощью команд joe (то есть выделением блока в первом файле и его копированием или перемещением во второй), или с помощью мыши - стандартным выделением и вставкой щелчком средней ее клавиши. Второй способ, естественно, может применяться и для обмена между разными копиями joe, запущенными на отдельных виртуальных консолях. | Между одновременно открытыми файлами возможен обмен данными: или с помощью команд joe (то есть выделением блока в первом файле и его копированием или перемещением во второй), или с помощью мыши - стандартным выделением и вставкой щелчком средней ее клавиши. Второй способ, естественно, может применяться и для обмена между разными копиями joe, запущенными на отдельных виртуальных консолях. | ||
- | Одновременно открытые файлы могут быть представлены как в полноэкранном виде, так и каждый в своем окне. Для переключения между однооконным и многооконным режимами служит комбинация **Control+K - I**. Размер каждого из выведенных окон может быть увеличен или уменьшен **(Control+K - G и Control+K - T, соответственно), правда, только с шагом в одну экранную строку. Переключение между открытыми документами, вне зависимости от режима, осуществляется комбинациями Control+K - N (вперед или вниз) и Control+K - P (назад или вверх).** | + | Одновременно открытые файлы могут быть представлены как в полноэкранном виде, так и каждый в своем окне. Для переключения между однооконным и многооконным режимами служит комбинация **Control+K - I**. Размер каждого из выведенных окон может быть увеличен или уменьшен **(Control+K - G** и **Control+K - T**, соответственно), правда, только с шагом в одну экранную строку. Переключение между открытыми документами, вне зависимости от режима, осуществляется комбинациями **Control+K - N** (вперед или вниз) и **Control+K - P** (назад или вверх). |
К слову сказать, в joe возможен и независимый просмотр разных частей документа в отдельных окнах, для чего предназначена функция расщепления окна (Control+K - O). Ну и, конечно же, фрагменты из одной части файла могут быть легко перенесены в другую. | К слову сказать, в joe возможен и независимый просмотр разных частей документа в отдельных окнах, для чего предназначена функция расщепления окна (Control+K - O). Ну и, конечно же, фрагменты из одной части файла могут быть легко перенесены в другую. | ||
- | ====Универсальной комбинацией для окончания любой операции в joe является | + | Универсальной комбинацией для окончания любой операции в joe является |
- | Control+C. С ее помощью закрывается окно с текущим документом; если он был единственным в данном сеансе, одновременно происходит и выход из редактора. В обоих случаях следует запрос на сохранение изменений, буде таковые имелись. Отказаться от выхода или закрытия файла можно повторным нажатием той же комбинации Control+C. Она же используется для прекращения любой длящейся во времени (спеллинг, поиск) или требующей подтверждения операции. | + | **Control+C**. С ее помощью закрывается окно с текущим документом; если он был единственным в данном сеансе, одновременно происходит и выход из редактора. В обоих случаях следует запрос на сохранение изменений, буде таковые имелись. Отказаться от выхода или закрытия файла можно повторным нажатием той же комбинации Control+C. Она же используется для прекращения любой длящейся во времени (спеллинг, поиск) или требующей подтверждения операции. |
Кроме этого, непосредственно из joe, без выхода, можно обращаться к командам оболочки (shell), причем - различными способами. Так, комбинация **Control+K - Z** обеспечивает временный выход в оболочку, где можно вводить любые ее команды. А по завершении операций - вернуться в среду joe можно комбинацией fg. То есть в данном случае мы имеем дело с обычной приостановкой текущей задачи. | Кроме этого, непосредственно из joe, без выхода, можно обращаться к командам оболочки (shell), причем - различными способами. Так, комбинация **Control+K - Z** обеспечивает временный выход в оболочку, где можно вводить любые ее команды. А по завершении операций - вернуться в среду joe можно комбинацией fg. То есть в данном случае мы имеем дело с обычной приостановкой текущей задачи. | ||
Кроме этого, есть и более интересная возможность: открытие внутри joe, посредством комбинации **Control+K - '** (апостроф), самостоятельного окна с собственной командной оболочкой. Здесь можно выполнять любые команды с выводом их результатов на экран. После чего стандартной командой exit осуществляется выход из среды, а все результаты сохраняются обычным для joe образом в виде текстового файла: возможность неоценимая при создании и редактировании всякого рода скриптов. | Кроме этого, есть и более интересная возможность: открытие внутри joe, посредством комбинации **Control+K - '** (апостроф), самостоятельного окна с собственной командной оболочкой. Здесь можно выполнять любые команды с выводом их результатов на экран. После чего стандартной командой exit осуществляется выход из среды, а все результаты сохраняются обычным для joe образом в виде текстового файла: возможность неоценимая при создании и редактировании всякого рода скриптов. | ||
Строка 97: | Строка 95: | ||
Таковы основные возможности joe для редактирования текстов общего характера. Кроме этого, имеется ряд команд специального назначения, используемых при программировании (поиск ошибок, компилирование и проч.), однако их я за ненадобностью (мне) не изучал. | Таковы основные возможности joe для редактирования текстов общего характера. Кроме этого, имеется ряд команд специального назначения, используемых при программировании (поиск ошибок, компилирование и проч.), однако их я за ненадобностью (мне) не изучал. | ||
Однако и сказанного достаточно для представления возможностей редактора joe. | Однако и сказанного достаточно для представления возможностей редактора joe. | ||
+ | |||
=====Макрокоманды ===== | =====Макрокоманды ===== | ||
Если же штатных команд редактора joe оказывается недостаточно, можно прибегнуть к их самостоятельному конструированию. | Если же штатных команд редактора joe оказывается недостаточно, можно прибегнуть к их самостоятельному конструированию. | ||
Строка 226: | Строка 225: | ||
Первый - возможность переопределения клавиатурных комбинаций, назначенных для штатных команд joe по умолчанию. Например, если вам не нравится, что пролистывание экрана осуществляется комбинациями | Первый - возможность переопределения клавиатурных комбинаций, назначенных для штатных команд joe по умолчанию. Например, если вам не нравится, что пролистывание экрана осуществляется комбинациями | ||
- | **Control+U** назад | + | * **Control+U** назад |
- | **Control+V* вперед | + | * **Control+V** вперед |
можно присвоить им иные значения (из числа свободных, разумеется). | можно присвоить им иные значения (из числа свободных, разумеется). | ||
Строка 239: | Строка 238: | ||
для спеллинга всего текста и отдельных слов, соответственно. Они просто описывают параметры вызова внешней программы проверки орфографии (по умолчанию - ispell). И подключение русского словаря при этом, разумеется, не предусмотрено. Чтобы осуществить это, следует просто добавить к обеим строкам после вызова исполнимой команды ispell опцию -d russian, в результате чего строки эти примут вид: | для спеллинга всего текста и отдельных слов, соответственно. Они просто описывают параметры вызова внешней программы проверки орфографии (по умолчанию - ispell). И подключение русского словаря при этом, разумеется, не предусмотрено. Чтобы осуществить это, следует просто добавить к обеим строкам после вызова исполнимой команды ispell опцию -d russian, в результате чего строки эти примут вид: | ||
- | <coide>:def spellfile filt,"cat >ispell.tmp;ispell -d russian ispell.tmp \ | + | <code> |
+ | :def spellfile filt,"cat >ispell.tmp;ispell -d russian ispell.tmp \ | ||
</dev/tty >/dev/tty;cat ispell.tmp;/bin/rm ispell.tmp",rtn,retype | </dev/tty >/dev/tty;cat ispell.tmp;/bin/rm ispell.tmp",rtn,retype | ||
:def spellword psh,nextword,markk,prevword,markb,filt,"cat \ | :def spellword psh,nextword,markk,prevword,markb,filt,"cat \ | ||
>ispell.tmp;ispell -d russian ispell.tmp </dev/tty >/dev/tty;tr -d | >ispell.tmp;ispell -d russian ispell.tmp </dev/tty >/dev/tty;tr -d | ||
- | \<ispell.tmp '\\012';/bin/rm ispell.tmp",rtn,retype,nextword </code> | + | \<ispell.tmp '\\012';/bin/rm ispell.tmp",rtn,retype,nextword |
+ | </code> | ||
Символы обратного слэша в конце строк означают только то, что каждая строка на самом деле не должна прерываться - вносить их в тело макроса не следует (нужно только позаботиться, чтобы опция переноса слов в редакторе была отключена). | Символы обратного слэша в конце строк означают только то, что каждая строка на самом деле не должна прерываться - вносить их в тело макроса не следует (нужно только позаботиться, чтобы опция переноса слов в редакторе была отключена). | ||
Дополнительные настройки | Дополнительные настройки | ||
- | В начале своего повествования я упоминал, что ныне (начиная с версии 3.0) в joe появилась возможность подсветки синтаксиса для ряда языков программирования и разметки. Чтобы ей воспользоваться, нужно, во-первых включить соответствующую опцию в конфигурационном файле **~/.joerc** - она расположена в секции Default local options** и имеет вид | + | В начале своего повествования я упоминал, что ныне (начиная с версии 3.0) в joe появилась возможность подсветки синтаксиса для ряда языков программирования и разметки. Чтобы ей воспользоваться, нужно, во-первых включить соответствующую опцию в конфигурационном файле **~/.joerc** - она расположена в секции **Default local options** и имеет вид |
<code>-highlight </code> | <code>-highlight </code> | ||
- | Далее, требуются файлы описания цветов для синтаксических элементов различных языков. Примеры таких файлов расположены в **/usr/local/etc/joe/synatx** и охватывают языки Си (c.jsf), Assembler (asm.jsf), Fortran (fortran.jsf) и многие другие. Есть здесь и файлы описания языков командных оболочек (sh.jsf и csh.jsf), diff-файлов (diff.jsf), конфигов (conf.jsf), а также языков разметки (html.jsf и xml.jsf). Единственное, что остается с ними сделать - это отредактировать их в соовтетствие с предпочтительной цветовой гаммой (и, вероятно, сохранить в собственном домашнем каталоге под именами типа .html.jsf и так далее). | + | Далее, требуются файлы описания цветов для синтаксических элементов различных языков. Примеры таких файлов расположены в **/usr/local/etc/joe/synatx** и охватывают языки |
+ | |||
+ | * Си (c.jsf), | ||
+ | * Assembler (asm.jsf), | ||
+ | * Fortran (fortran.jsf) | ||
+ | * и многие другие. | ||
+ | |||
+ | Есть здесь и файлы описания языков | ||
+ | * командных оболочек (sh.jsf и csh.jsf), | ||
+ | * diff-файлов (diff.jsf), | ||
+ | * конфигов (conf.jsf), | ||
+ | * а также языков разметки (html.jsf и xml.jsf). | ||
+ | |||
+ | Единственное, что остается с ними сделать - это отредактировать их в соовтетствие с предпочтительной цветовой гаммой (и, вероятно, сохранить в собственном домашнем каталоге под именами типа .html.jsf и так далее). | ||
Наконец, последнее - это проверить соответствие файлов описаний в главном конфигурационном файле **~/.joerc**. По умолчанию в какждой языковой субсекции они указываются там в виде: | Наконец, последнее - это проверить соответствие файлов описаний в главном конфигурационном файле **~/.joerc**. По умолчанию в какждой языковой субсекции они указываются там в виде: | ||
Строка 382: | Строка 396: | ||
* Meta+M ввод регулярного выражения; | * Meta+M ввод регулярного выражения; | ||
* Meta+H отправка сообщения (нечто вроде команды write, но на одном и том же терминале). | * Meta+H отправка сообщения (нечто вроде команды write, но на одном и том же терминале). | ||
+ | |||
+ | {{tag>howto Консоль Система Текстовый_редактор}} |