Если не хотите потратить время зря!
Пока что, эта статья только для 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
Это всё!!!