Специфическое in-house исполнение (трагикомичное) позволяет предложить это только как идею, хотя может быть этим всем даже можно пользоваться.
При изменеии хоткеев важно не забыть, что первые два маркоса держатся прицеплены к третьему липучкой eval — макросы с липучками вынесены в начало файла.
Apps — если нет выделенного блока, то копирование строки (c EOL) с сохранением позиции курсора/экрана; если есть — копирование блока (горизонтального с EOL — ниже, без EOL или вертикального — правее)
RCtrlApps — то же самое в другую сторону
AltUp/Down — если нет выделенного блока, то перемещение строки; если есть, то блока.
AltLeft/Right
Если нет выделенного блока, то выделение слова под курсором, если есть — перемещение блока.
Если блок с EOL, то перемещение блока на экран выше/ниже
AltApps (или стандартный CtrlD) — удаление выделенного блока
RCtrlEnter/RCtrlShiftEnter — перемещение текущей строки вниз/вверх без выделения и с сохранением позиции курсора/экрана
LCtrlUp/Down — Переход в начало/конец выделенного блока (удобно менять направление выделения на ходу) или прокрутка экрана CtrlUp/Down, но с сохранением выделения. Если на пути прокрутки выделенный блок, то курсор перейдет в начало блока, потом в конец, потом пойдет прокручивать дальше (и наоборот).
LCtrlLeft/Right — слово влево/вправо с сохранением выделения
LCtrlApps — эксплицитный вход в/выход из режима постоянных блоков (с индикацией в статусной строке) (всегда)
ShiftApps/CtrlShiftApps — эксплицитный вход в/выход из режима постоянных блоков (с индикацией в статусной строке) (дополнительно, при отсутствии выделенных блоков)
При использовании LCtrlUp/Down/Left/Right для навигации с сохранением выделения или в режиме постоянных блоков:
Apps - Копирование блока в место, где установлен курсор
ShiftApps — если нет выделения — выход из режима постоянных блоков, если есть — перемещение выделенного блока в место, где установлен курсор
RCtrlApps — если выделенный блок — вертикальный, и курсор на строке выше или ниже блока, то блок будет скопирован в место, где установлен курсор, но как горизонтальный (с автоматическим появлением необходимого количества новых строк); если курсор в пределах выделения, то скопирован левее как вертикальный.
CtrlShiftApps — перемещение вертикального блока с той же логикой, что и RCtrlApps
Расширение документа при достижении первой/последней строки учитывается (но не для вертикальных блоков, хотя на последней все равно работает).
Alt+стрелки курсора наплодит пробелов, если курсор за пределами строки разрешен и блок перетаскивается по правому краю; многострочный блок, уткнувшийся в левый край, по умолчанию не поедет вышеправеенаискось при последующем нажатии AltLeft.
Эксплицитный переход в режим постоянных блоков отключает удаление блоков по Del; отключается удалением "Editor.Set(3,0)" и "Editor.Set(3,1)" из макроса LCtrlApps.