Как стать автором
Обновить

НЕ VIM, а круче (xah fly keys) или XAH FLY KEYS. Большой выпуск

Время на прочтение7 мин
Количество просмотров5.9K
Если не хотите потратить время зря!

Пока что, эта статья только для EMACS-еров, а изначально создана лишь для меня

Насколько я знаю многие программисты используют VIM, а некоторые тоже используют VIM, но они это делают в EMACS-е, EVIL (злом) режиме, это значит, что эти люди понимают все прелести VIM (быстрое редактирование текста без использования мыши, наличие нескольких режимов и т.д.), но им очень нравится возможность добавлять миллиарды плагинов. Но ещё я знаю, что VIM был сделан несколько миллионов лет назад, для программистов того времени и для того чтобы быть отдельным редактором (не для EMACS), поэтому VIM использует не все возможности которые мог бы, например: Клавиша для входа в командный режим находится в самой жопе углу клавиатуры (и. да я знаю что это можно легко поправить в .vimrc), также если я захочу перейти к редактированию другого файла, то мне нужно:

  1. Перейти в командный режим (Нажав сами знаете куда)

  2. Напечатать `:find` и имя файла

  3. Если я ошибся в имени файла ---> во 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 всё описано, но я всё-таки обьясню краткий способ как это сделать:

  1. Скачать xah-fly-keys через MELPA package manager для EMACS

  2. Вставить и исполнить такой 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-е.

  1. Чтобы настроить выполнение какой-нибудь функции при нажатии какой-то клавиши в 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
  2. Чтобы то же самое провернуть только в 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

Это всё!!!

Теги:
Хабы:
Всего голосов 2: ↑2 и ↓0+2
Комментарии21

Публикации

Истории

Ближайшие события

2 – 18 декабря
Yandex DataLens Festival 2024
МоскваОнлайн
11 – 13 декабря
Международная конференция по AI/ML «AI Journey»
МоскваОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань