HbEdit

Консольный мультиплатформенный текстовый редактор

О редакторе. Концепция

Hbedit - это моя попытка сделать идеальный текстовый редактор. Идеальный для меня - у каждого свои представления об идеале. Я отдаю себе отчет, что даже, ограничив задачу своими предпочтениями, идеального результата не достичь - на то он и идеал, он всегда где-то за горизонтом. Но стремиться к нему надо, что я и пытаюсь сделать.

Идеальный редактор должен обеспечиваать все необходимые функции, но не быть перегруженным лишними. Он должен соединять в себе лучшие черты лучших редакторов, но это соединение не должно быть эклектичным. Должна быть система, гармоничное соединение всех чвстей, интуитивно-понятный, логичный интерфейс.

Конечно же, он должен быть кросс-платформенным. Должен быть гибким, настраиваемым, должен обеспечиввать возможность подключения дополнительных модулей (плагинов) для расширения функциональности.

За основу были взяты редакторы, которыми я обычно пользуюсь: два "обычных" - встроенные от Far (Windows) и от Midnight Commander (Linux), и Vim. Задачу реализовать все возможности Vim и даже большую их часть я, конечно, перед собой не ставил - во-первых, это слишком большой объем работы, во-вторых, это просто излишне. Достаточно, на мой взгляд, реализовать основные, наиболее используемые функции - те, что использую сам или предполагаю когда-нибудь использовать - по мере улучшения знакомства с Vim этот набор расширяется. С другой стороны, хотелось расширить возможности режима редактирования и, тем самым, свести к минимуму переключения из одного режима в другой.

Основные особенности

Общее описание

Hbedit - мультирежимный редактор, он поддерживает четыре режима, два основных (режим редактирования и Vim-режим) и два дополнительных (режим выделения и командный). Опция defmode в секции OPTIONS hbedit.ini определяет, какой из двух, режим редактирования (defmode=0) или Vim-режим (defmode=1) будет режимом по умолчанию. Возможен еще вариант, когда режим редактирования является не только основным, но и единственным (defmode=-1) - при этом переключение в Vim-режим невозможно. Это имеет смысл, если пользователь гм... не очень квалифицирован и случайное переключение в Vim-режим может оказаться для него шоком.

Переключение между режимами зависит от того, какой выбран в качестве режима по умолчанию (основного). Если это режим редактирования, то переключение в Vim-режим происходит при нажатии Ctrl-Q, обратно - ESC (или одна из Vim-команд: i, a, ...). Если же основным выбран Vim-режим, то переключения туда/обратно осуществляются так, как это делается в Vim: i, a, и пр. - в режим редактирования, ESC - обратно в Vim. И еще: если основным является режим редактирования, то закрыть текущее окно можно, нажав ESC, для Vim это не сработает.

Режим редактирования - это привычный большинству режим работы текстового редактора. При желании вы вполне можете обойтись им одним. Удобство Hbedit в том, что он не навязывает вам определенную модель работы.

Vim-режим - тот, что является основным в редакторе Vim. Клавиши в этом режиме служат не для ввода текста, а для выполнения определенных команд. В Hbedit поддерживается некоторое подмножество команд Vim, полный список вы можете посмотреть в следующем разделе.

В режим выделения вы переключаетесь автоматически, начав выделять текст. Это можно сделать несколькими способами. В режиме редактирования можно, как в большинстве Windows-редакторов, использовать Shift + клавиши перемещения, для выделения вертикального блока - Shift-Alt + клавиши перемещения. В Vim-режиме жмем v для начала обычного выделения, V - выделения строк, Ctrl-v - выделения вертикального блока. В обоих режимах можно использовать F3 (как в mc) для начала обычного выделения, Ctrl-F3 - выделения вертикального блока. Далее - клавиши перемещения. Я называю выделение отдельным режимом, так как при этом меняется предназначение клавиш. В большинстве Windows-редакторов при нажатии, допустим, f, в процессе выделения, у вас будет удален выделенные текст и на его место будет вставлен символ f. Я не вижу в этом большой пользы. В Hbedit при нажатии клавиши, если она есть в списке команд выделенного режима, будет выполнено определенное действие - в большинстве случаев это соответствующая команда Vim. Так, например, при нажатии u выделенный текст будет сконвертирован в lower case. Полный список команд режима выделения см. здесь. Нажав F9 или m, вы вызываете специальное меню для режима выделения с рядом дополнительных команд, набор которых может быть расширен при помощи специального плагина. Так, вы можете добавить заданный текст слева или справа от каждой строки выделенного текста, отсортировать строки текста по выделенному вертикальному блоку, подсчитать сумму чисел в выделенном вертикальном блоке.

Командный режим тоже заимствован из Vim. Переключение в него производится из Vim-режима с помощью Ctrl-Q (для удобства, если вы переключились в Vim из режима редактирования с помощью Ctrl-Q) или, как принято в Vim, Shift-:. При этом вы переходите в командную строку, где можно вводить и запускать на исполнение разные команды. Набор этих команд настолько ограничен по сравнению с Vim, что мне даже неловко об этом режиме рассказывать. Это q, q!, e, w, set (с очень ограниченным набором параметров), bp, bn, ls, ! - пользователи Vim знают, что это такое.

Клавиши управления

Эти клавиши работают и в режиме редактирования и в Vim-режиме:

F10, Esc Выход;
F9 главное меню;
F1 экран справки;
F2 сохранить файл;
Shift-F2 сохранить файл как;
F3 выделение блока;
Ctrl-F3 выделение вертикального блока;
F7 поиск;
Shift-F7 искать следующее вхождение;
Alt-F7 искать предыдущее вхождение;
Ctrl-F7 поиск/замена;
F8 включить/отключить подсветку синтаксиса;
Shift-F8 выбрать кодовую страницу;
Alt-F8 перейти на заданную позицию (строка,позиция);
F11 список плагинов;
F12 список открытых файлов;
Ctrl-Q Изменить текущий режим;
Ctrl-Z или Alt-BS Undo;
Ctrl-Tab, Shift-Tab переключение между буферами (открытыми файлами)/окнами;
Ctrl-v, Shift-Ins вставить текст из буфера обмена;
Ctrl-p вставить текст из одного из внутренних буферов обмена;
Alt-m[a...z] установить закладку;
Alt-'[a...z] перейти на закладку;
Alt-'. перейти к месту последнего редактирования;
Ctrl-b перейти на парную скобку.
Alt-b Вернуться на предыдущую позицию (после поиска, перехода,...)
Ctrl-w,s Разделить окно по горизонтали и открыть тот же файл в readonly режиме;
Ctrl-w,v Разделить окно по вертикали и открыть тот же файл в readonly режиме;
Ctrl-w,w Переключиться в соседнее окно;
Ctrl-w,c Закрыть окно;
Ctrl-w,o Открывает дочернее окно на весь размер;

Клавиши для режима выделения:

Ctrl-C или Ctrl-Ins или y поместить текст в системный буфер;
F3 поместить текст в один из 10 внутренних буферов (0-й - системный);
Del или d удалить текст;
Shift-Del или Ctrl-X поместить в системный буфер и удалить;
c удалить текст и перейти в режим редактирования;
u, U сконвертировать, соответственно, в нижний или верхний регистр;
>, < увеличить/уменьшить отступ;
. повторить последнюю операцию над выделенной областью;
m или F9 вызов меню действий с выделенной областью;
o продолжить выделение с противоположного конца;
r[x] заменить все символы выделенного текста на x;
i[w,W] выделить слово под курсором;
i[",'] выделить текст в кавычках, двойных или одинарных;
i[b,(,)] выделить текст в круглых скобках;
i[ выделить текст в квадратных скобках;
i[B,{,}] выделить текст в фигурных скобках;
is выделить предложение;
ESC отменить выделение.

Клавиши Vim-режима:

h,j,k,l курсор влево, вниз, вверх, вправо;
w, W следующее слово (большое слово);
e, E конец слова (большого слова);
b, B начало слова (большого слова);
0 начало строки;
^ начало первого слова в строке;
$ конец строки;
gi перейти к месту последнего редактирования;
gg перейти в начало файла;
[1...9]gg перейти на указанную строку;
[1...9]G перейти на указанную строку;
G перейти в конец файла;
H перейти к первой строке на экране;
M перейти к середине экрана;
L перейти к последней строке на экране;
Ctrl-b PgUp
Ctrl-f PgDn
% перейти на парную скобку;
f[x] найти следующий символ x;
F[x] найти предыдущий символ x;
* найти слово под курсором;
# найти слово под курсором (в обратном направлении);
/ поиск из командной строки;
v переход в режим выделения;
V переход в режим выделения целых строк;
Ctrl-v переход в режим выделения вертикального блока;
p, P вставить текст из буфера;
yy копировать текущую строку в буфер;
yi[w,W] копировать слово под курсором в буфер;
yi[",'] копировать текст в кавычках, двойных или одинарных в буфер;
yi[b,(,)] копировать текст в круглых скобках в буфер;
yi[ копировать текст в квадратных скобках в буфер;
yi[B,{,}] копировать текст в фигурных скобках в буфер;
yis копировать предложение в буфер;
"[a...z,-] установить регистр для последующей операции;
i переход в режим редактирования в текущей позиции;
a переход в режим редактирования после текущей позиции;
I переход в режим редактирования с первого слова строки;
A переход в режим редактирования с конца строки;
cc удалить текущую строку и перейти в режим редактирования;
c[w,W] удалить до начала следующего слова и перейти в режим редактирования;
c[e,E] удалить до конца слова и перейти в режим редактирования;
c[b,B] удалить до начала слова и перейти в режим редактирования;
сi[w,W] удалить слово и перейти в режим редактирования;
сi[",'] удалить текст между кавычек и перейти в режим редактирования;
ci[b,(,)] удалить текст в круглых скобках и перейти в режим редактирования;
ci[ удалить текст в квадратных скобках и перейти в режим редактирования;
ci[B,{,}] удалить текст в фигурных скобках и перейти в режим редактирования;
o вставить строку после текущей и перейти в режим редактирования;
r заменить один символ;
R заменить несколько символов (перейти в режим редактирования)
~ инвертировать регистр символа под курсором;
>> Сдвиг текущей строки вправо;
<< Сдвиг текущей строки влево;
dd удалить текущую строку;
d[w,W] удалить до начала следующего слова;
d[e,E] удалить до конца слова;
d[b,B] удалить до начала слова;
di[w,W] удалить слово;
di[",'] удалить текст между кавычек;
di[b,(,)] удалить текст в круглых скобках;
di[ удалить текст в квадратных скобках;
di[B,{,}] удалить текст в фигурных скобках;
x удалить символ;
. повторить последнюю операцию;
m[a...z] установить закладку;
'[a...z] перейти на закладку;
'. перейти к месту последнего редактирования;
u undo;
ZQ Закрыть все буферы без сохранения;
ZZ Закрыть все буферы, сохранив измененные;
q[0...9,a...z] запись макро (q - конец записи);
@[0...9,a...z] проигрывание макро;
@@ проигрывание последнего использованного макро;
[0...9]@[0...9,a...z] проигрывание макро указанное число раз;

Число, введенное перед командой перемещения (h,j,k,l,w,W,e,E,b,B), или перед dd, dw, dW, db, dB, de, dE, cc, cw, cW, cb, cB, ce, cE производит соответствущее действие указанное количество раз. Для команд <<, >> это число определяет количество сдвигаемых строк.

Параметры командной строки

hbedit [-f iniFileName] [-gN] [-xy=xPos,yPos] [-size=nCols,nRows] [-ro] [files...]

hbedit.ini

hbedit.ini - конфигурационный файл редактора. При запуске hbdeit он ищется сначала в текущем каталоге, а затем, если не найден, в каталоге, где находится исполняемый файл hbedit. В Linux/Unix системах после текущего каталога он ищется также в домашнем каталоге (~/hbedit/hbedit.ini). Путь и имя конфигурационного файла можно задать также в командной строке при вызове hbedit.

Секция SCREEN

Задает размеры окна редактора, шрифт и кодовую страницу по умолчанию.

Секция START

Секция OPTIONS

Секция CODEPAGES

Здесь перечисляются кодовые страницы, используемые в работе (полный список - в разделе Кодовые страницы). Каждая кодовая страница - в отдельной строчке: cp1=RU866, cp2=RU1251, ...

Секция PLUGINS

Здесь перечисляются плагины, используемые в работе. Каждый плагин - в отдельной строчке: p1=..., p2=... . Плагин - это файл с расширением .hrb в каталоге plugins/. В каждой строчке через запятую указывается имя файла, тип файла, название, которое будет отображаться в меню, и, если нужно, сочетание клавиш, сопоставляемое этому плагину (Alt-L, например, - в этом случае плагин будет вызываться при нажатии Alt-l).

Тип файла - это один из определенных в hbedit.ini языков ( prg, c, go, ... ). Это сделано для того, чтобы при вызове списка плагинов (F11) отображались только те, которые созданы для языка файла в текущем окне. Если тип файла плагина не указан (пустой), то он появляется в списке для любого файла.

Секция HILIGHT

Здесь определяются цвета для цветовой схемы по умолчанию (default), они указываются в форме, принятой в Harbour, TextColor/BackColor. BackColor может принимать значение из следующего списка:

N, B, G, BG, R, RB, GR, W - в цветовой схеме по умолчанию это, соответственно, черный, синий, зеленый, циан, красный, фиолетовый, коричневый, светло-серый.

TextColor - один из списка BackColor или

N+, B+, G+, BG+, R+, RB+, GR+, W+ - в цветовой схеме по умолчанию это, соответственно, темно-серый, голуюой, светло-зеленый, светлый циан, светло-красный, светло-фиолетовый, желтый, белый.

В другой цветовой схеме, solarized, например, указанные буквы могут соответствовать совсем другим цветам.

Секции PALETTE

Этих секций может быть несколько, они должны иметь разные названия, начинающиеся с PALETTE: PALETTE_1, PALETTE_2, ...

Секции LANG

В этих секциях содержатся параметры, относящиеся к конкретному типу файла. Название секции - LANG_<type>, где <type> - тип файла: LANG_PRG, LANG_C, LANG_GO, LANG_XML, ...

Кодовые страницы

Hbedit поддерживает все кодовые страницы, поддерживаемые Harbour: BG866, BGISO, BGMIK, BGWIN, BIG5, CP950, CS852, CS852C, CSISO, CSKAMC, CSWIN, DE850, DE850M, DEISO, DEWIN, DK865, EL437, EL737, ELISO, ELWIN, EN, ES850, ES850C, ES850M, ESISO, ESMWIN, ESWIN, FI850, FR850, FR850C, FR850M, FRISO, FRWIN, GBK, HE862, HEWIN, HR646, HR852, HRISO, HRWIN, HU852, HU852C, HUISO, HUWIN, IS850, IS861, IT437, IT850, IT850M, ITISB, ITISO, ITWIN, LT775, LTWIN, NL850, NL850M, NO865, PL852, PLISO, PLMAZ, PLWIN, PT850, PT860, PTISO, RO852, ROISO, ROWIN, RU1251, RU866, RUISO, RUKOI8, SK852, SK852C, SKISO, SKKAMC, SKWIN, SL646, SL852, SLISO, SLWIN, SR646, SR646C, SRWIN, SV437C, SV850, SV850M, SVISO, SVWIN, TR857, TRISO, TRWIN, UA1125, UA1251, UA866, UAKOI8, UTF8.

Вы можете включить те из них, которые будете использовать, в hbedit.ini, секцию CODEPAGES.

Список готовых плагинов

Создание плагинов



Комментариев:       ()       пред.    след.       Добавить комментарий
Длина комментария - не больше 4000 символов.
Ваше имя:

Адрес электронной почты:
(не предназначено к показу)
 
Введите текст с картинки: