понедельник, 30 ноября 2015 г.

Поиск в Emacs при помощи Swiper

Нужно признать очевидное, дефолтный поиск в Emacs ужасен, допускаю, что там есть волшебные настройки делающие его лучше, но я так и не смог их осилить. Скажу страшное, если по текущему файлу нужно было много искать - я зачастую переключался в Sublime Text и делал это там. Но похоже я нашёл для себя решение, делающие мои волосы мягкими и шелковистыми, имя ему - swiper.


В принципе можете сразу прейти на его GitHub страницу и почитать всё там, тем более, что рассказать в рамках поста про все его возможности я не смогу. Он вообще умеет много чего, начиная от поиска тегов в org-mode до поиска файлов, интегрируется со многими другими плагинами и т.п. Но как по мне, действительно хорошо, я бы даже сказал лучше всех он делает поиск(и замену) в файле.

Судите сами: для его настройки, достаточно сделать 2 вещи, установить его из Melpa и добавить в конфиг две строчки:
(ivy-mode 1)
(advice-add 'swiper :after #'recenter)
Причём последняя не обязательная - это уже моё дополнение, что бы найденная строка центрировалась на экране, так по моему удобнее. В дальнейшем, конечно захочется переназначить горячие клавиши, поправить конфиг, но по большому счёту пользоваться умолчательными настройками комфортно.

Поиск начинается с "M-x swiper", ну или горячей клавиши, что вы назначите. Все найденные строки сразу подсвечиваются, а что бы было совсем удобно - под строкой поиска выводится все найденные результаты, по которым через "C-n"/"C-p" можно "походить" выбирая нужный:

Там вообще довольно много горячих клавиш, большинство совпадает со стандартными Emacs-овскими, другие приходится отыскивать самим. В документации я полного описания не нашёл, но их можно найти в Github (если ссылка устареет - ищите на той странице "defvar ivy-minibuffer-map"). В целом концепция поиска выглядит необычно, но буквально через день, этого начинает не хватать в остальных редакторах.

Swiper так же поддерживает регулярные выражения при поиске, мне в принципе они особо не нужны, пользуюсь только пробелом, который эквивалентен ".*?", но при желании подробнее про них можно почитать в wiki:

Если в режиме поиска нажать "M-q" - можно заменить найденное на вашу строку:

Я далеко не всё описал, целью было лишь показать, что есть такой интересный плагин, дальше лучше читать автора.

Из недостатков стоит отметить, то что автор активно развивая проект, периодически ломает существующий функционал. Но при этом надо отдать должное на заведённые баги реагирует очень быстро, вполне реально получить от него исправление ошибки на выходных через 40 минут. И это скорее моя проблема, что я использую не "MELPA Stable", а последние релизы плагинов. Ещё есть проблема документации, wiki проекта далеко не такая полная, как хотелось бы, но это скорее придирки, при желании находится его блог, в котором всё расписано куда лучше.

7 комментариев:

  1. > если ссылка устареет - ищите на той странице "defvar ivy-minibuffer-map"

    Давал бы ссылку сразу на конкретный коммит, по хоткею 'Y' на гитхабе :)

    ОтветитьУдалить
    Ответы
    1. Так он поменяет все хоткеи на новые, а у меня ссылка на старый комит.

      Удалить
    2. А, не так твое намерение понял, извини)

      Просто как-то не принято, вроде, давать ссылку на конкретную строку без указания конкретного комита.

      Удалить
    3. Да, оффтоп, конечно, извиняюсь, но у меня других твоих контактов все равно нет. Ты тут меня вдохновил опять попробовать свой журнал вести - http://ozkriff.github.io/2015-11-30--devlog-live-again.html , спасибо :)

      Удалить
    4. Прямо праздник какой-то в этом году - одних на подкасты подсадил, другого на блог :) Поздравляю

      Удалить
  2. Спасибо за журнал, всегда смотрю с интересом.

    ОтветитьУдалить