Если не хотите потратить время зря!
Пока что, эта статья только для EMACS-еров, а изначально создана лишь для меня
Насколько я знаю многие программисты используют VIM, а некоторые тоже используют VIM, но они это делают в EMACS-е, EVIL (злом) режиме, это значит, что эти люди понимают все прелести VIM (быстрое редактирование текста без использования мыши, наличие нескольких режимов и т.д.), но им очень нравится возможность добавлять миллиарды плагинов. Но ещё я знаю, что VIM был сделан несколько миллионов лет назад, для программистов того времени и для того чтобы быть отдельным редактором (не для EMACS), поэтому VIM использует не все возможности которые мог бы, например: Клавиша для входа в командный режим находится в самой жопе углу клавиатуры (и. да я знаю что это можно легко поправить в .vimrc), также если я захочу перейти к редактированию другого файла, то мне нужно:
-
Перейти в командный режим (Нажав сами знаете куда)
-
Напечатать `:find` и имя файла
-
Если я ошибся в имени файла —> во 2 пункт
Это может занять целую вечность, а менять текущий файл приходиться очень часто! А ещё если вы используйте раскладку dvorak, то как возможно вообще пользоваться VIM-ом? И вообще все клавишы VIM настроены не для того чтобы быстро ими пользоваться, а для того чтобы быстрее запомнить это тоже конечно классно, ведь каждая команда в VIM может превращаться в целое красивое и понятное любому носителю языка, предложение, а XAH FLY KEYS таким похвастаться не может, ведь он крут в другом, быстром редактировании текста, причем если вы пользователь какой-то не популярной раскладке, то лучше вы вряд ли найдете!
Переходим к самому главному в этой прекрасной статье.
XAH FLY KEYS
Все эти недостатки не имеет наш XAH FLY KEYS, он уже был разработан в наше время и не имеет все недостатки VIM, и по моему скромному мнению это самый лучший в мире способ для редактирования текста!
Чуть-Чуть Истории
Этот мощный инструмент разработал XAH LEE, если вы уважающий себя EMACS-ер то вы знаете его имя, ведь этот мудрый китаец придумал ErgoEmacs и возможно вы также пользовались им.

Однако у него есть 1 недостаток (точнее больше, но о них Я вам не расскажу), это не наличие нормальной документации, она конечно есть, но сами посмотрите:

Вам конечно этого может и хватит, но блин XAH FLY KEYS имеет в несколько 10-в раз больше возможностей, которые я попробую объяснить (к сожалению я пользователь QWERTY раскладки и не буду объяснять как всем этим пользоваться на раскладке DVORAK или AZURE).
Установка
На github всё описано, но я всё-таки обьясню краткий способ как это сделать:
-
Скачать xah-fly-keys через MELPA package manager для EMACS
-
Вставить и исполнить такой Emacs Lisp код:
(require 'xah-fly-keys) (xah-fly-keys-set-layout "qwerty") ; обязательно (xah-fly-keys 1)
Полбзуемся
Вообще XAH-FLY-KEYS имеет 2 режима: COMMAND и INSERT (как в VIM), но в COMMAND есть тоже несколько режимов или не режимов, а префиксов для HOT-KEYS, сейчас всё объясню чуть по подробнее:
-
INSERT mode — (для вход из COMMAND наберите f) обычное редактирование файла
-
COMMAND mode — (для входа из INSERT наберите Alt+SPACE) режим для набора команд
А если вы в COMMAND mode, то вы можете набрать какую-то буковку и что-то произойдет, например если нажать f, то вы окажетесь в INSERT mode, НО также если вы нажмете SPACE (пробел), то все клавиши изменят свое значения, например если вы нажмете Space f, то вас заставят написать имя буфера для перехода в него, но также есть специальный клавиши и если на них нажать после того как вы нажали SPACE, то клавиши опять изменят свое значение, например если вы напечатайте Space i f, то перейдете в файл путь которого был под курсором.
БАЗА
Начнем с чего-то по проще:
Перемещение
j — влево на один символ
i — вверх на один символ
k — вниз на один символ
l — вниз на один символ
o — вперёд на 1 слово
u — назад на 1 слово
; — вперёд на 1 предложение, Пример:

h — назад на 1 предложение
m — на прошлую закрывающую скобку
. — на прошлую открывающую скобку
/ — на противоположную скобку, Пример:

0 — перейти на место прошлого перемещения.
Это очень удобно, например если вам надо просто добавить import файла, то вы идете сначала в начало файла, пишите импорта, нажимаете 0, и работайте дальше, думая о том что вы гений.
Ctrl+4 — перейти на место следующей ошибки (работает только flycheck-mode)
Ctrl+3 — перейти на место прошлой ошибки (работает только flycheck-mode)
Space H — перейти в начало файла (Space — пробел)
Space N — перейти в конец файла (Space — пробел)
Space p — проскролить (если нажали первый раз -> расположить текущую строчку по середеине экрана, второй раз -> на начало экрана, третий раз -> на конец экрана)

Выделение
8 — выделить текущее слово, если нажмете снова, то выделится вся строка, а потом по одной строке далее

1 — выделить то, что возможно или увеличить, то, что уже выделено

2 или 7 — выделить текущую строку
6 — выделить «блок»

9 — выделить текст в ковычках
t — начать выделять то, где ты двигаешься (VISUAL MODE)
Space a — выделить весь файл
Space o Space — включить режим выделение блоком

Удаление
d — удалить 1 символ позади
5 — удалить 1 символ впереди
e — удалить слово позади
r — удалить слово впереди
x — вырезать строчку если что-то выделено вырезать то, что выделено (см. Копирование/Вставка)
Space g — удалить всё от положения курсора до конца строки
g — удалить блок:

Space k f — удалить все строки, которые подходят к тому, что мы напишим
Space k t — удалить все строки которые совпадают с текущей
Space k g — удалить все строки которые не совпадают с текущей
Space k a — удалить все «пустые» строчки
Редактирование
‘ — изменить виды разделителей. (Если пробелы -> поменять на подчеркивания, Если подчеркивания -> минусы (тире)), Пример:

z — Закомментировать/Раскомментировать текущую строчку или то, что выделено
w — если нету пробела поставить, если есть удалить.
Очень странная штука.
p — вставить пробел (Для этого не надо переходить в INSERT мод)
b — поменять регистр (Заглавный Регистр, нижний регистр, ВЕРХНИЙ РЕГИСТР)
Space 6 — поменять регистр у всего предложения
Space k e — отсортировать выделенные строчки
Space k p — экранировать все выделенные ковычки (поставить «\» перед «, которые находятся в выделенном тексте)
Space k k — повторить прошлую команду
Space o f — каждую линию обернуть в ковычки или в скобки или в то что вы там напишите, и разделить тем, что вы там выберите
Space o g — превратить пробелы в переходы на новую строку
s — создать новую строчку, но на неё не перейти
Работа с окнами/файлами (FRAMES)
, — перейти в другое окно (FRAME)

4 — разделить окно по горизонтальной линии
Space 4 — разделить окно по вертикальной линии
Space 5 — сделать все окна одинакого размера
Ctrl+7 — следующий буфер (открытый файл)
Ctrl+8 — прошлый буфер (открытый файл)
Ctrl+t — новый пустой буфер
Ctrl+w — закрыть текущий буфер (открытый файл)
Ctrl+s — сохранить буфер (открытый файл)
Space m — просмотреть в dired режиме текущую дерикторию
Ctrl+Shift+s — сохранить буфер как…
Space l b — сохранить все файлы
Space i w — открыть в приложение по умолчанию
Space i g — скопировать полный путь до файла
Space i s — открыть в проводнике файл
Space i f — открыть файл путь которого под курсором (путь не обязательно полный)
Space , Del — удалить текущий файл
Space , x — сохранить все файлы + закрыть редактор
Space , c — запустить текущий файл
При старте поддерживаются вот такие, вот языки:
php
perl
python
ruby
go
haskell
js
typescript
shell
clojure
racket
ocaml
cscript
tex/latex
java
Вид
Space l Space — включить подрисовку пробелов

Space l . — расширить на весь экран (похоже на f11 в вашем браузере)
Space l 2 — подсвечивать текущую строку
Space l 4 — вкл./выкл. показ номера строк
Soace l t — вкл./выкл. перенос строк
Ctrlr+= — увеличить шрифт
Ctrlr+- — уменьшить шрифт
Space l g — создать новое окно и отрыть в нём EMACS с текущим файлом
Плюшки (от Emacs)
Space l 6 — календарь (красивый очень)
Space l 7 — калькулятор (Вот как им пользоваться)
Space l 9 — выполнить команду в теринале
Space l 0 — выполнить команду в терминале, применить к выделению
Space l c — проверить все орфографические ошибки в файле
Space l , — включить браузер в Emacs
Space l d — включить эмулятор терминала в Emacs
Space 9 — проверить на грамотность слово
a — выполнить команду ELisp (тоже самое, что Alt+X)
Помощь. HELP
Space j a — найти все команды совпадающие с нашим шаблоном
Space j j — описать функцию
Space j v — описать горячую клавишу
Space j l — описать переменную
Space j g — дать информацию по всему что у меня есть
Макросы
Space o e — запись макроса
Space o r — стоп записи макроса
Space o h — вызвать последний макрос
Space o w — применить макрос ко каждой выделенной строки
Поиск
n — поиск с переходом, Я не знаю как объяснить, короче вот:

Space k r — поиск + замена, сначала выделит все совпадения так же как и при поиске с переходм, потом будет спрашивать надо ли заменить слово:
-
Напечатайте SPACE, если да
-
Напечатайте DEL, ксли нет
-
Напечатайте ENTER, если пропустить
Space k d — Поиск строк по шаблону (выделенных строк)
Space y — начать поиск текущего слова
Копирование/Вставка
с — копировать (Если ничего не выделено копировать строку)
v — вставить
x — вырезать (Если ничего не выделено вырезать строку)
Работа с регистром 1. WTF?
Если, что регистр 1 — очень классная вещь, это такой специальный буфер в который вы можете копировать текст, добавлять текст, вставлять его содержимое в текущий файл и т.д. и т.п.
Space k 1 — добавить в регистр 1 выделенный текст (если ничего не выделено -> добавить строку)
Space k 2 — очистить регистр 1
Space k 3 — копировать в регистр 1 = очистить регистр 1; добавить в регистр 1 текст
Space k 4 — вставить содержимое
Кастомизируем
В Emaces любое действие можно сделать через какую-то Eisp фуекцию поэтому настройка также будет на ELisp-е.
-
Чтобы настроить выполнение какой-нибудь функции при нажатии какой-то клавиши в COMMAND режиме, то :
(defun my-xfk-addon-command () "Modify keys for xah fly key command mode keys To be added to `xah-fly-command-mode-activate-hook'" (interactive) (define-key xah-fly-key-map (kbd "какая-то клавиша") 'имя какой-нибудь функции) ) (add-hook 'xah-fly-command-mode-activate-hook 'my-xfk-addon-command) ;; Здесь мысоздаем функцию my-xfk-addon-command, ;; которая связывает какую-нибудь функцию с какой-то клавишей. ;; а потом с помощью add-hook выполняем эту функцию перед входом в Command mode -
Чтобы то же самое провернуть только в INSERT ружиме надо выполнить почти такой же код:
(defun my-xfk-addon-command () "Modify keys for xah fly key command mode keys To be added to `xah-fly-command-mode-activate-hook'" (interactive) (define-key xah-fly-key-map (kbd "какая-то клавиша") 'имя какой-нибудь функции) ) (add-hook 'xah-fly-insert-mode-activate-hook 'my-xfk-addon-command) ;; Здесь мысоздаем функцию my-xfk-addon-command, ;; которая связывает какую-нибудь функцию с какой-то клавишей. ;; а потом с помощью add-hook выполняем эту функцию перед входом в insert mode
Это всё!!!
ссылка на оригинал статьи https://habr.com/ru/post/557892/
Добавить комментарий