• person rss_feed

    nerdfella’s feed

    Blog

    • chevron_right

      Emacs поневоле

      nerdfella · Sunday, 9 August, 2020 - 15:40 edit

    Если ты это читаешь, то скорее всего не от хорошей жизни, а от того, что уже обнаружил, что в vim'е есть только 2 режима: в одном он пищит (если включить звук), а в другом всё портит. К счастью есть альтернатива — замечательный редактор Emacs. Добрыми друзьями вы с ними скорее всего не станете, как не становятся друзьями когда в поезде пересаживаютя в соседнее купе от соседа алкаша, но поверь мне, это действительно классный редактор, а за одно могучий комбайн для работы с любым текстом: исходники программ, почта, чятики, работа с файлами, с git'ом, с отладчиками любых языков, календарь и планировщик, художественная и научная литература, в Emacs'е есть даже психотерапевт и TETЯIS.

    Не буду долго грузить, вот так Emacs может выглядеть после минимальной настройки. Emacs Мягкие цвета, от которых не вытекают глаза. Приятный шрифт, в котором невозможно спутать букву "О" и цифру "0". Специальными знаками показаны пробелы, табуляции и переносы строк. Скобки раскрашены разными цветами в зависимости от уровня вложенности. Ну а ещё я забыл файл переименовать, но ты ведь меня простишь?

    Для того чтобы добиться такой картинки тебе первым делом нужен Emacs. Скачай его вот с этой страницы:

    https://emacsformacosx.com/

    Установить его в ОС не даст ограничение прав, но, к счастью, этого и не требуется. Если кликнуть по DMG'шному контейнеру, то откроется окно, на котором можно не перетаскивая значок Emacs'а в папку Applications дважды по нему щёлкнуть и собственно запустить Emacs. Пока что закрой его, сначала немного пошаманим.

    Ещё давай поставим хороший шрифт Hack. Этот шрифт создан специально для программистов. У него есть несколько приятных особенностей, но грузить тебя я не буду, просто поверь мне, это очень хороший шрифт. Качай его отсюда:

    https://sourcefoundry.org/hack/#download

    Надо распаковать ZIP, внутри 4 варианта шрифта: обычный, полужирный, курсив и полужирный курсив. Если щёлкнуть по любому, то откроется FontBook, туда надо в Users перетащить всех четверых. Рекомендую, кстати, уставить этот же шрифт в iTerm'е, и размер поставь хотя бы 20. Поначалу будет казаться большим, но потом поймёшь, что это средний размер, а то что стоит по умолчанию просто издевательство.

    Emacs есть, шрифт есть. Теперь возьми мой минимальный конфиг по ссылке и положи в ~/.emacs.d под названием init.el, должен получиться файл ~/.emacs.d/init.el

    Там всё довольно подробно откомментировано, прочти, а потом возвращайся сюда, я постараюсь максимально сжато рассказать как работать в Emacs'е. И да, в настройках клавиатуры поставь переключение раскладок CapsLock'ом, иначе MacOS будет терзать тебя своими сочетаниями вместо Emacs'овских.

    Итак, в Emacs'е нет режимов. Точнее они есть, но это совсем не те режимы, что в vim'е. Не нужно скакать туда-сюда из редактирования в навигацию и обратно. В Emacs'е режимы это "режим для C", "режим для Jav'ы" или "режим для почты", например. Ты можешь сразу приступать к редактированию нажимая буквы на клавиатуре и передвигаясь стрелочками.

    Второе, Emacs первоначально был написан вот на такой клавиатуре. Symbolics keyboard На ней, как видишь, помимо Ctrl есть ещё клавиша Meta, ныне почившая в бозе. Вместо неё используется Alt, ну или что там на Mac'ах вокруг пробела? Все сочетания клавиш используемые для управления редактором начинаются либо с Ctrl'а, либо с Met'ы, поэтому их обозначают просто "С" и "M". Например "открыть файл" делается командой "C-x C-f" — надо нажать Ctrl, не отпуская нажать "x", отпустить "x", всё ещё не отпуская Ctrl (если отпустили Ctrl, то нажмите снова) нажать "f", отпустить "f", теперь нужно отпустить Ctrl и ввести название файла, например ~/.emac.d/init.el

    Вот несколько полезных команд:

    C-x C-f — Открыть файл
    C-x C-s — Сохранить файл
    C-x C-c — закрыть Emacs
    C-g — отменить исполняемую или набираемую команду. Если Emacs делает что-то странное, то первым делом нажми C-g
    C-q — поставить знак, который идёт после этого сочетания. Например C-q TAB поставит табуляцию. Обычно нажатие клавиши Tab в Emacs'е только устанавливает правильный уровень отступа текста. Это пригодится для соблюдения безумных правил выравнивания.
    C-s — искать по файлу вперёд. Нажми C-s, набери несколько букв, Emacs уже ищет. Ещё раз нажмёшь C-s — будет искать следующее вхождение искомой строки. Каждый раз нажимать Ctrl не обязательно, можно просто не отпуская Ctrl нажимать "s", каждый раз Emacs будет переходить к следующему найденному. Когда надоест — C-f.
    C-r — искать по файлу назад. Правила те же. Кстати, от поиска вперёд можно быстро переходить к поиску назад. Просто при уже введённом слове жми C-s и будешь искать вперёд, C-r — снова назад. Можно скакать по местам использования какой-нибудь переменной или перескакивать на объявление функции.
    C-SPC — (это Ctrl-пробел) поставить метку. Весь текст от метки до курсора [выделенный] регион. Если ещё раз нажать C-SPC, то метка переставится в новое положение. Если поставить метку туда где она уже стоит, и курсор тоже там стоит, то метка отключается. Другими словами, если вы передумали что-то делать с регионом, то нажмите C-SPC 2 раза.
    C-k — "убить" регион. Это аналог привычного "вырезать", чуть позже покажу различия.
    M-w — добавить в kill ring (об этом ниже) без kill'а. Ну или по-русски говоря "скопировать".
    C-y — yank region, аналог "вставить". Кстати, вставка из MacOS'ного буфера обмена работает.
    C-x b — переключится в другой ранее открытый файл.
    C-x C-b — вывести список открытых файлов. На самом деле список "буферов", это немного другое, но помимо нескольких служебных буферов там будут твои открытые файлы.
    C-x o — переключится в другой буфер в окне (сейчас поймёшь).
    C-x 1 — оставить только 1 буфер в окне.
    C-x 2 — разделить окно на 2 буфера горизонтальной линией.
    C-x 3 — разделить окно на 2 буфера вертикальной линией.
    C-_ — undo. Да, это Ctrl и подчёркивание.
    C-M-\ — сделать правильные отступы в выделенном регионе.

    Есть ещё много полезных сочетаний, но они у меня в механической памяти, я даже не могу вспомнить на каких буквах они находятся. Чуть позже попробую отредактировать это место.

    yank'нуть можно несколько раз, но главное, всё kill'нутое попадает не просто в "буфер обмена", а в "kill ring". Если после yank'а нажать M-y (Meta, которая Alt или Command и "y", ты ведь помнишь), то вставленный фрагмент заменится на предпоследний kill'нутый, потом на ещё более ранний, и так далее.

    Теперь давай поставим приятную тему и разноцветные скобочки. Запусти M-x package-list-packages (целиком набирать не надо, где-то на середине можно нажать Tab, и Emacs сам дополнит команду до конца, если только нет команд с похожими названиями). Запустится Melpa — управлятор всякими дополнениями для Emacs'а. Подожди минутку, пусть Melpa достучится до всех трёх источников, которы мы указали в конфигурационном файле. Ты поймёшь что это так, когда в списке будут мелькать пакеты из всех трёх источников, Melpa, Marmelade и GNU. Найди в списке "material-theme". Ты ведь уже умеешь пользоваться C-s ? Поставь курсор на строчку с material-theme и нажми "i", слева появится "I", значит пакет помечен для установки. Теперь найди rainbow-delimiters и сделай с ними то же самое, поставь курсор, нажми "i". Теперь нажми "x" — это значит "execute" — исполнить. Melpa установит пакеты помеченные для установки. Потарахтит несколько секунд и напишет что ты молодец, а пакеты установлены. Теперь открой (напоминаю C-x C-f) ~/.emacs.d/init.el , сотри ";" перед опциями включающими material-theme и rainbow-delimiters. Закрой Emacs (C-x C-c), открой его снова (можно, конечно, без этого, но я стараюсь не грузить тебя информацией). Теперь открой какой-нибудь C'шный исходник. Voila, у тебя приятный шрифт, мягкие цвета, ты отлично видишь служебные символы, уровень вложенности скобок и отступы.

    Когда будет свободная минутка рекомендую нажать C-h t — запустится интерактивный учебник по Emacs'у, из которого ты узнаешь ещё множество замечательных команд и полезных терминов, которые позволят грамотно задавать вопросы об Emacs'е и быстро находить ответы на Emacs Wiki, Stackoverflow и в других местах.

    Ты стоишь на пути к овладению одним из самых мощных программистских инструментов. Не сдавайся, верю, что у тебя всё получится.