migmit: (Default)
[personal profile] migmit
Несмотря на то, что пользую его постоянно.

Вот ПОЛНЫЙ список того, чем я реально пользуюсь в Emacs:

1) Базовые вещи, связанные с редактированием текста - открытие, просмотр, набор текста, перемещение курсора, выделение, копирование, вставка, удаление, отмена последнего действия (какой кретин решил, что "C-x u" это удобно???), сохранение. Notepad.exe может всё это и ещё чуть-чуть.

2) Чуть больше продвинутого редактирования: поиск и замена, в том числе по регэкспам, автодополнение (только по словам, имеющимся в открытых файлах).

3) Одновременная, в рамках одного окна, работа с несколькими файлами. В разных буферах, но в одном окне.

4) Абсолютно базовые вещи, связанные с поддержкой языка программирования. А именно: подсветка синтаксиса и более-менее разумная расстановка отступов. Сюда же: автозамена табуляций на пробелы.

5) Киллер-фича: возможность запускать REPL в том же окне (в другом фрейме). Сюда же: интеграция REPL с редактором, из которой я реально использую C-c C-l, C-c C-t и C-c C-i, причём последние два - довольно редко. Ещё сюда же: возможность использовать окно REPL по существу как то же самое окно редактора - за исключением ввода произвольного текста в произвольном месте (даже C-y работает). Ещё сюда же: грамотная подсветка в REPL.

6) Быстрый переход к месту ошибки. Помогает.

7) Даже как-то стыдно упоминать, но: полноэкранный режим работы, причём графический. У меня макось, и возможность убрать из поля зрения абсолютно всё очень приятна (ладно тулбар, я даже в меню не лазил уже несколько лет как).

ВСЁ!

А теперь то, что часто выставляется как фича, причём важная, и чем я не пользуюсь вообще.

1) Какие-либо системы управления проектами, системы автоматической сборки и т.п. То есть, я, конечно, пользуюсь ими (например, cabal-ом), но Emacs тут ни при чём, cabal запускается из терминала, либо, в крайнем случае, из того же REPL.

2) Системы контроля версий. Опять-таки, я их пользую (обычно hg), но из того же терминала. Мёржи делаются не в каком-то специальном режиме, а "как есть", в одном файле.

3) Средства удалённой работы. По-моему, редактировать нелокальный файл — некий идиотизм.

4) Сниппеты. У меня не такая хорошая память, и думать о том, на какой аккорд у меня повешен сниппет, я не имею ни малейшего желания.

5) Фолдинг. Вообще не понимаю, нафига он нужен. Если надо одновременно видеть две функции, проще разместить их рядом, а не сворачивать весь код между ними.

6) Теги, которые etags. Наличие :i в REPL позволяет в большинстве случаев получить всю необходимую информацию, вообще не заглядывая в исходник; если таки нужно посмотреть, что там, то в выводе :i сразу видно, в какой файл смотреть.

7) Языкозависимое автодополнение. Типа, я набрал точку после имени модуля, и сразу получил список функций в нём. Если сильно надо, я наберу :bro в REPL. И да, мне не лень ОДИН РАЗ набрать идентификатор типа insertWithKey, а в остальные разы я его получу примитивным автодополнением.

8) Доступ к документации. Для документации у меня открыт браузер, и я быстро найду всё, что нужно. А если я уже знаю функцию, которая мне интересна, то, как правило, кроме её типа мне не нужно ничего, а его я получу из REPL.

9) Работа с файловой системой. У меня есть командная строка, и я умею ею пользоваться.

10) Поиск по многим файлам. Это очень редко нужно, а когда нужно — я знаю grep-фу.

Список можно продолжать бесконечно.

Суммируя: единственное, что РЕАЛЬНО держит меня на Emacs'е — это REPL. Всё остальное, что мне нужно, есть в ЛЮБОЙ IDE и в почти любом редакторе для программистов. Но эта фича — ключевая. И да, Emacs — худший из имеющихся редакторов (кроме, возможно, Vim), если забыть про эту фичу. Но с ней получается, что остальные ещё хуже.

Более-менее приблизился к этому Sublime Text. Но искаропки оно работало, когда я на него смотрел, из рук вон плохо. Достаточно уже того, что подсветка в REPL была а) такая же, как в коде, и б) не отличала код, набранный мной, от результатов, выводимых выполняемой функцией. Вообще, у меня создалось впечатление, что там ещё кучу всего пилить и пилить.

Leksah и Yi у меня собрались только в текстовом режиме. Я люблю терминал, но редактор должен быть отдельно.

Всё. Выдохнул.

Update: OK, убедили, возможно когда-нибудь я стану пускать grep из Emacs.

Update 2: ещё одну полезную штуку вспомнил — htmlize.el, чтобы весь код, вместе с подсветкой, экспортировать в HTML.

Date: 2014-02-03 07:59 pm (UTC)
From: [identity profile] migmit.livejournal.com
> что еще?

Э... ну, вроде, вставляет в конец файла текущую дату и время, если файл начинается с .LOG. По крайней мере, раньше так было точно, сейчас не знаю.

> запускаешь M-x compile, натравливаешь на скрипт комплиции, профит.

Пишешь cabal install, никаких скриптов.

> очень удобно когда нужно зайти на какую-нить виртуалку и там что-то поменять. гораздо быстрее чем вручную набивать ssh

М-м-м... почему это?

> советую все-таки почитать про dired и его возможности, например C-x C-q

Читал. Не впечатлился. Переименовывать файлы вообще нужно крайне редко.

> Греп удобней пускать в соседнем буфере и быстро прыгать по файлам

Можно. А можно запустить его в терминале и держать отдельно от, собственно, файлов.

> ни один редактор который я знаю не предоставляет такой расширяемости

Охотно верю. И это надо объяснить отдельно.

В каком случае появляется мегарасширяемость? Я вам скажу. В том случае, когда основная, искаробочная функциональность сделана чёрт-те как. В том случае, когда все проблемы сваливаются на пользователя. А тогда пользователю ПРИДЁТСЯ заниматься настройками.

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

Date: 2014-02-03 09:49 pm (UTC)
From: [identity profile] 4da.livejournal.com
> Э... ну, вроде, вставляет в конец файла текущую дату и время, если файл начинается с .LOG. По крайней мере, раньше так было точно, сейчас не знаю.
ну, это тривиально допинать (если на самом деле нужно)
скорее всего если это распространеный кейс, то существует major mode для таких файлов.

> Пишешь cabal install, никаких скриптов.
в comile буфере можно удобно прыгать между ошибками (открывается буфер с файлам в нужном месте)

> М-м-м... почему это?
Не выходишь из привычной среды редактирования.

> Можно. А можно запустить его в терминале и держать отдельно от, собственно, файлов.
и на каждую ошибку запускать редактор и переходить вручную на место ошибки?

> А тогда пользователю ПРИДЁТСЯ заниматься настройками.
Невозмножно сделать интсрумент на все случаи жизни для всех юзеров, который сразу подойдет для всех.
Всегда чего-то хватать не будет. возможность поднастроить под спефичный кейс - благо.
это философия емакса. можно пользоваться одним иснструментом для всех задач, связаных с текстом, а можно разными.

Date: 2014-02-03 10:16 pm (UTC)
From: [identity profile] migmit.livejournal.com
> ну, это тривиально допинать

Я ни разу не утверждал, что Notepad.exe умеет что-то, чего не умеет Emacs. Я лишь охарактеризовал часть используемых мною возможностей как тривиальные, которые ДАЖЕ Notepad.exe умеет, и уточнил, что это даже не полный список его возможностей.

> в comile буфере можно удобно прыгать между ошибками (открывается буфер с файлам в нужном месте)

Так при C-c C-l происходит ровно то же самое.

> Не выходишь из привычной среды редактирования.

И чем это так хорошо?

> и на каждую ошибку

Мы про греп или про что?

> Невозмножно сделать интсрумент на все случаи жизни для всех юзеров, который сразу подойдет для всех.

КОНЕЧНО!!! Именно поэтому разным юзерам нужны разные инструменты. Более того, одному и тому же юзеру для разных задач нужны разные инструменты.

> это философия емакса

Что не означает, что это хорошо.