пятница, 7 ноября 2008 г.

А не попробовать ли emacs?

Я давно уже плююсь на монстроподобные эклипсы и убогие блокноты. Я понимаю, что научиться работать с vim или emacs - значит потратить много времени. Но сколько я трачу времени на элементарные действия в обычном редакторе? Мне кажется, намного больше. Поэтому я наконец решился и... поставил emacs. Вот мои первые впечатления.

Трудно. Очень трудно. Особенно, если учесть, что я не обладаю десятипальцевым слепым методом набора. Но как приятно, что больше не надо никуда тянуть руки! Они просто стоят на своих местах и работают. А emacs... Он просто выполняет свою работу. Тихо и незаметно, без лишних рюшечек.

$ emacs --version
GNU Emacs 22.2.1

Прежде всего я внимательно изучил туториал, доступный в меню Help, и постарался в дальнейшем следовать всем его рекомендациям. В частности, пользоваться ключами управления курсором вместо специальных кнопок на клавиатуре. Непривычно, но ведь если хочешь что-то изменить, то нужно к чему-то привыкать! :-)

Русский текст отображался превосходно только в справке, но вот вводиться с клавиатуры никак не хотел - одни квадратики, и открываемые файлы в кодировке utf8 отображались неверно. Решить проблему удалось путем размещения в файле настроек ~/.emacs следующих команд.

Включаем правильный шрифт - это самое главное. Вы можете модифицировать эту строку на свой вкус, если понимаете, о чем идет речь ;-) Кстати, помню была иксовая утилитка для выбора шрифта в таком формате. Кто-нибудь подскажет как ее зовут? (Как верно подметили в комментариях, ее зовут xfontsel)

(set-default-font "-*-fixed-medium-r-normal-*-16-*-*-*-*-*-koi8-r")

Ставим все что можно в utf. Не уверен, что это нужно, но в ходе раскопок интернета у меня в конфиге образовался такой блок.

(set-language-environment "Russian")
(set-terminal-coding-system 'utf-8)
(set-clipboard-coding-system 'utf-8)
(set-selection-coding-system 'utf-8)
(set-keyboard-coding-system 'utf-8)
(prefer-coding-system 'utf-8)

Настаиваем работу с буфером обмена, чтобы вставлялся нормальный русский текст, а не крокозяблики.

(setq x-select-request-type '(UTF8_STRING COMPOUND_TEXT TEXT STRING))

Если что-то не работает - обратите внимание на сообщения об ошибках (меню Buffers -> Messages). Возможно у вас просто нет подходящего русифицированного шрифта.

После некоторого времени работы с русским текстом надоело переключать раскладку, чтобы переместить курсор или выполнить другую команду. Потому что в русской раскладке ключи не работают. Решение оказалось совершенно элементарным: нужно пользоваться встроенной в emacs переключалкой (C-\). Тоже довольно непривычно, и поначалу сильно путался. Но ведь никто не обещал, что счастье настанет сразу ;-)

При работе с emacs вы можете в один прекрасный момент обнаружить отсутствие руководства (manual). Это связано с тем, что Дебиан заботится о вашей свободе. Свобода свободой, но я, видимо, еще не до конца понял, почему мне не стоит устанавливать себе на компьютер руководство emacs. Поэтому я его таки поставил:

$ sudo apt-get install emacs22-common-non-dfsg

Видимо из-за программистской натуры я всегда считал: чем целый час делать рутинную работу - лучше два часа потратить на написание программы, которая все это сделает за тебя :-) Вот и здесь я сразу же познакомился с возможностью записывать макросы, и воспользовался ею раньше, чем поиском и заменой.

'C-x (' - начать запись;
'C-x )' - закончить запись;
'C-x e' - воспроизвести;
'C-u 10 C-x e' - повторить 10 раз.

Думаю, для начала этого хватит. А дальше - в мануал. Там есть еще много интересных возможностей.

Для работы с php (к сожалени, приходится :-) я скачал свежий php-mode, т.к. имеющийся в репозитории старый и немного глючный.
http://php-mode.sourceforge.net/
Чтобы включить его, нужно распаковать файл .el в папку, доступную emacs. Например, /usr/share/emacs/site-lisp
Затем в файле настроек добавляем:

;; php mode
(require 'php-mode)

Небольшие поправки для автоформатирования, чтобы отступы расставлялись так, как я привык это делать:

;; abbrev-mode
(add-hook 'php-mode-hook
'(lambda ()
(define-abbrev php-mode-abbrev-table "ex" "extends")
(c-set-style "cc-mode")
(c-set-offset 'arglist-close 0)))

А также небольшой набор моих предпочтений:
- отступ по табулции только если курсор в начале строки;
- отображение позиции курсора в строке;
- отступ символами табуляции;
- отображение размера окна;
- ширина табуляции - 4 символа.

(custom-set-variables
;; custom-set-variables was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
'(c-tab-always-indent nil)
'(column-number-mode t)
'(indent-tabs-mode t)
'(size-indication-mode t)
'(tab-width 4))

Теперь, к сожалению, становится неудобно набирать текст везде, кроме emacs. В этом, наверное, и кроется ответ на вопрос, зачем емакс стал операционной системой :-) Буквально через несколько дней использования emacs я стал искать какой-нибудь способ сделать так, чтобы все поля ввода во всех приложениях реагировали на управляющие комбинации клавишь emacs. Но я так и не нашел решения. Люди, помогите! :-)


Прошел месяц с начала написания этой заметки. Сегодня я решил сдуть с нее пыль и таки опубликовать :-) Хочу вам сказать, что эксперемент по переходу на емакс завершился успешно. По крайней мере я свободно использую все его базовые функции. Пользоваться другими редакторами нет никакого желания. Ни в одном редакторе я не видел настолько интеллектуальную обработку вводимого текста и такую гибкость настроек. И это при том, что я пока очень поверхностно знаком с его возможностями.

Вначале статьи я писал, что не владею слепым десятипальцевым методом набора. Это неправда. Уже неправда. Emacs научил меня набирать вслепую. Правда, несколько лет назад я пытался пройти курс "Соло на клавиатуре". Но все, что осталось от тех уроков - осведомленность о том, как правильно держать руки над клавиатурой. Хотя, все же, это было очень важно. Так что советую почитать хотя бы первые уроки этого тренажера.

Ну и напоследок, почему я выбрал именно emacs а не vim. Мне симпотичны оба эти редактора. Я долго рылся в инете и читал разные сравнительные статьи и флуд на эту тему. И отдал предпочтение emacs, потому что:
1. Более полноценный на мой взгляд графический интерфейс.
2. Давно хотел научиться играть на пианино :-D В общем, мне больше понравилась идея удерживать контролы и альты, чем переключаться между режимами редактирования.
3. Модульность и расширяемость. Мне показалось, что здесь все-таки больше гибкости, чем в vim, но я могу ошибаться.
4. Ричарда Столлмен :-) Мне нравится его скурпулезная фанатичность, поэтому я склонен доверять его выбору, как авторитетному.

И все же, если вы собрались перейти на более продвинутый редактор, я советую Вам лично изучить emacs и vim или им подобные, и сделать свой выбор самостоятельно. Ваши предпочтения и цели могут сильно отличаться от моих. Единственное, чего я не советую, так это пользоваться "блокнотами" с громкими названиями IDE ;-)

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

  1. Хмм, не находил поводов и времени, чтобы посмотреть на столь часто упоминаемые в среде линуксоидов vim и emacs.. Теперь, наверное, на досуге поставлю. :)

    ОтветитьУдалить
  2. Главное, будьте готовы к тому, что прежде чем это чудо доставит вам удовольствие, оно съест немало вашего времени и, возможно, терпения :-)

    Ну, и не забудьте поделиться вашими личными впечатлениями.

    ОтветитьУдалить
  3. Утилита для выбора шрифта в формате
    "-*-fixed-medium-r-normal-*-16-*-*-*-*-*-*-cp1251"
    называется xfontsel

    ОтветитьУдалить
  4. Спасибо!!! :-) (пошел выбирать шрифт)

    ОтветитьУдалить
  5. На вим начинать ещё труднее (это же редактор, который умеет только пищать и текст портить, и выходят оттуда с помощью reset'а) , я начинал раза три-четыре. Потом сорвало крышу и я его месяц гиперактивно твикал. До сих пор в процессе.
    Модульность и расширяемость всё-таки лучше в емаксе. А ещё недавно в операционной системе емакс появился отличный редактор (ц).

    ОтветитьУдалить
  6. Я лично рассматриваю многофункциональность емакса исключительно как побочный эффект, который мне никак не интересен. Для меня емакс - это просто текстовый редактор. По крайней мере пока :) Использовать его в качестве почтового клиента или мессенджера никак не хочется. Но, блин, так хотелось бы перенести его управляющие клавиши на все что только можно! :)

    По поводу vim - я им начал пользоваться раньше и пользуюсь до сих пор. Но навыки мои сводятся к базовым. Даже курсором управляю стрелками на клаве. Тем не менее, он меня ни чуть не раздражает. Никаких проблем при редактировании конфигов не возникает :)

    ОтветитьУдалить
  7. Не могли бы вы как-нить выделить куски кода? В <pre> какойнить заключить их, что ли?

    А вообще, emacs - это здорово. Ну и да, оно таки лучше vi.

    ОтветитьУдалить
  8. Когда приходилось сидеть под виндами использовал утилиту AutoHotKey(http://www.autohotkey.com/) + различные скрипты для "Emacs раскладки". Пришлось, конечно, подстраивать под себя, но это того стоит. Только потом становишься еще сильнее зависим от emacs bindings :), так что я все-таки отказался от такого решения.

    ОтветитьУдалить
  9. " Кстати, помню была иксовая утилитка для выбора шрифта в таком формате. Кто-нибудь подскажет как ее зовут?"
    xfontsel

    ОтветитьУдалить
  10. 1. Есть плагин firemacs для iceweasel.
    2. Если от этого кому-то станет легче. Многие родные приложения MacOSX используют такие же комбинации клавишь. (Safari, X-Code)

    ОтветитьУдалить
  11. Не могу сказать, что от этого стало намного легче, но все же это немного согревает... :-)
    За плагин - спасибо, не знал.
    Я обратил внимание, что ключи управления курсором работают и в bash, и даже (кто бы мог подумать!) в vim! :-) Это не может не радовать. Но все же, это далеко не все, чего хотелось бы.

    ОтветитьУдалить
  12. рекомендую почитать http://kb.mozillazine.org/Emacs_Keybindings_(Firefox)

    там полезный намек на то чтобы переделать все gtk приложения в нужные раскладки :)

    а также глянуть в сторону расширения vimpretator, впрочем от него я отказался в пользу Mouseless Browsing

    всем любителям MacOS X и редактора BBEdit - там подефолту включены emacs - скоращения ну естественно с некоторыми оговорками

    ОтветитьУдалить
  13. чуть не забыл. если охота вообще делать в своей оси все через такие сокращения то пора смотреть в сторону таких wm как awesome, ratpoison, ion3. рекомендую пока последний, awesome 3.x не смотрел, говорят мало чем хуже, тот же lua. но у awesome работа с многомониторными конфигурациями лучше. и будет тогда wm для работы и для всякой прочей лабуды. также странная трабла была что под ion не работает opengl ускорение. возможно это я криворукий, но в принципе в quake играю редко и из под xfce

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