LINUX.ORG.RU

Статья «Emacs с удобствами».


0

0

Новая статья о Emacs. По сути, продолжение статьи "Точки Emacs" (которая со времени первой публикации очень сильно изменилась). Кроме общих приколов содержится информация о компиляции в Emacs, о ECB, которая превращает Emacs в более полную интегрированную среду разработки программ (и не только программ) и о взаимодействии Emacs с CVS. Кажется это первый более-менее подробный материал о ECB на русском. Есть скриншоты с примерами. Проводится идеология экономии пальцевых усилий в работе и предлагается возможное подспорье.

Всякая конструктивная критика яростно ;) приветсвуется. Благодаря ЛОРу первая статья была радикально переработана и улучшена за что всем огромное спасибо.

>>> Сама статья "Emacs с удобствами"

★★★

Проверено: Demetrio ()

Ответ на: комментарий от lg

> используй макросы для первого времени

кстати если фрагмент однострочный то можно поиск/замена задействовать. Но я не знаю как с обстоят дела с многострочной заменой? Да и слишком много лишних движений. Фрагмент сначала выделить потом скопировать куда-то потом редактировать поглядывая на соседний с фрагментом текст (так как в статье описано :) а потом заменять сначала копируя оригинал в строку поиска и т.д. Замахаешься.

anonymous
()
Ответ на: комментарий от d2r

> Прошу прощения... А что, Dreamweaver уже под linux'ом работает?! Без вайна?

Мечты, мечты...

anonymous
()
Ответ на: комментарий от hbee

> Если спрашиваешь - значит получится :)

Да это как раз для меня не проблема. Я собсно саму смысловую часть затрудняюсь написать. Так как для этого нужно всё таки с эмаксом немного освоится. А на это нужно время.

anonymous
()
Ответ на: комментарий от anonymous

> а под маздаем ничего кроме перделок для тюнинга реестра и бустеров вообще не работает

а емакс к какой категории вышеперечисленого относится?

anonymous
()
Ответ на: комментарий от anonymous

>нужно всё таки с эмаксом немного освоится. А на это нужно время.

Ну да. Ты не торопись, прочитай внимательно столменовскую документацию сплошь, потом пару книг по Лиспу... Я так делал.

hbee ★★★★
()

Очень бы хотелось увидеть подобную статью, про то, как прикрутить GDB к Emacs Имеется ввиду расстановка breakpoints, watch ну и подобные вещи.

LX ★★
()

Emacs - хорошая операционная система, вот только редактор в ней подкачал ;) (с) Не помню кто.

А вообще я емакс только ради дохтура держу ;)

anonymous
()
Ответ на: комментарий от hbee

> Ты не торопись

Просто работать нужно сейчас :)

anonymous
()
Ответ на: комментарий от anonymous

> знаю что не сложно. для ворда за 5 минут написал. но я совсем
> Emacs'a не знаю. и лиспа не знаю. и линуксе я новичок. ламер короче.
> может ты  напишешь мне?

без проблем.  Конкретно сформулируй feature request и приведи пример

дело примерно так выглядит:

(defun my-complex-replace (b e)
  "Complex replace."
  (interactive "r")

  (let (ost nst nrepls)
    (unwind-protect
        (progn
          (narrow-to-region b e)
          (setq ost (buffer-substring (point-min) (point-max)))
          (message "Press `C-M-c'(or whatever) when you finished.")
          (recursive-edit)
          (setq nst (buffer-substring (point-min) (point-max))))
      (widen))

    (goto-char (point-min))
    (setq nrepls 0)
    (while (search-forward ost nil t)
      (setq nrepls (1+ nrepls))
      (replace-match nst))
    (unless (zerop nrepls)
      (message "Total %d replaces." nrepls))
    ))

Usage: выделяешь регион, давишь M-x my-complex-replace RET, редактируешь дело .. давишь C-M-c

lg ★★
()

Отличная статья. Спасибо!

Cybem ★★
()
Ответ на: комментарий от anonymous

> Emacs - хорошая операционная система, вот только редактор в ней подкачал

Ну сколько можно цитировать эту глупость?! За последний год раз 50 встречал наверное. Один сказал идиотизм, а другие - повторяют.

Cybem ★★
()
Ответ на: комментарий от Cybem

> Ну сколько можно цитировать эту глупость?! За последний год раз 50 встречал наверное. Один сказал идиотизм, а другие - повторяют.

Против истины не попрешь. В ОС emacs можно создать удобный редактор и многие это делают, но вот готового - нет.

anonymous
()
Ответ на: комментарий от Cybem

есть еще одна - 'Linux это либа для Emacs'

lg ★★
()

"emacs с удобствами" - забавный аксюморон :)))

HellAngel ★★
()

Ответы всем

Всем спасибо за отклики!

>1. Позор. При чём здесь хирагана? =)

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

>2 Можно объяснить, чем shell от eshella отличается.

Я в shell мало успел поработать. Он совсем иной. Например, стрелка вверх не вызывает предыдущую команду, а просто гуляет по буферу. С другой стороны там также нет многих шелловских команд.

>Любезные, можно в нескольких словах чем Emacs лучше VIMа, и чем VIM лучше Emacsа. Короче, их плюсы и минусы. Буду признателен.

Никто никого не лучше. Они просто разные. Главный минус Vim для меня - это наличие мод. Это все равно, что каждый раз набирая заглавную букву пользовать CapsLock. Попользовался, а потом не забудь снова нажать, чтобы перейти в нормальный режим. Это неудобно для меня: я из тех, кто пользуется Shift, а CapsLock не трогает годами.

Есть отличия и более глубинные: лисп - это несколько иной образ мышления.

Интересно, что в то время как Emacs с переменным успехом претендует чуть ли не на замену операционки,его пользователи оказываются довольно сдержанными по жизни. Поклонники Vim обычно настроены более фанатично, хотя у концепции меньше претензий. Это странно.

А вот супер квалифицированного сравнения мы, видимо, вряд ли дождемся. Для этого надо квалифицированного пользователя обоих редакторов. А тут вообще даже с просто квалифицированными дефицит :) И такие уже не рвутся что-то менять.

2LX:

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

Спасибо за совет: можно вставить код в статью? На самом деле это важно, если у вас колесо вместо кнопки.

2Ott:

>emacs - это интегрированная среда для работы, а не только редактор

>Mozilla, emacs и несколько xterm'ов поскольку мне удобно через них ходить на разные хосты

Это точно. Кстати, у меня тот же набор приложений.

И второй комментарий по делу: очень важно единообразие действий. А вообще вам мое глубокое почтение за переводы документации!

Неужели гнус все же такой хороший? Он годится для почты? Можно мозиловую переписку в него конвертировать?

>я бы посоветовал вместо eshell term использовать. зачастую это удобнее, так как запускается внешний шелл и доступны переменные окружения

Я попробовал. Но тогда у меня не раскрашиваются файлы. А из Vim все равно не выйти без убийства. Кстати, у меня все переменные окружения благополучно наследуются в eshell. Проблем не возникало.

2lg:

>класс! спасибо а почему ничего не сказано про mode-compile.el?

Исключительно от незнания. Спасибо за подсказку! А вот за тот кусок кода на лиспе - респект. :)

>Это не совсем по-русски:

Я потом соберу все замечания по русскому языку и постараюсь исправить то, что написал плохо. Спасибо.

>а под виндой этот ecb работает?

Судя по скриншотам с их сайта, у меня возникло стойкое ощущение, что он даже разрабатывается сейчас под виндой.

>Это разве не недостаток? (замечание о поддержке языков в Emacs).

В первую очередь это недостаток тех, кто делал эту поддержку в операционной системе и X

2LX:

>Очень бы хотелось увидеть подобную статью, про то, как прикрутить GDB к Emacs Имеется ввиду расстановка breakpoints, watch ну и подобные вещи.

И мне бы хотелось :) Когда как следует разберусь с этим, то добавлю главу к статье или напишу третью.

Всем еще раз спасибо! Если кому не ответил, то не держите зла - очень большая проблема со временем.

atoku ★★★
() автор топика
Ответ на: комментарий от anonymous

> В ОС emacs можно создать удобный редактор и многие это делают, но вот готового - нет.

а где оно такое есть, убобный (+универсальный) редактор из коробки? Не vim же..

anonymous
()
Ответ на: комментарий от anonymous

> а где оно такое есть, убобный (+универсальный) редактор из коробки? Не vim же..

Удобный и универсальный - понятия противоположные. Удобный - vim, универсальный - emacs.

anonymous
()
Ответ на: Ответы всем от atoku

Скажите, в emacs есть история перемещений, то есть, чтобы после перехода в другое место файла (например, после поиска) или в другой буффер можно было вернуться на старое место? Иногда такой возможности сильно не хватает.

anonymous
()
Ответ на: Ответы всем от atoku

> Я попробовал. Но тогда у меня не раскрашиваются файлы. А из Vim все равно не выйти без убийства. Кстати, у меня все переменные окружения благополучно наследуются в eshell. Проблем не возникало.

возможно. я просто zsh использую. из-за этого скорее всего и проблемы возникали с переменными. а файлы раскрашиваются. потому что LS_COLORS у меня своя, отлячающаяся от стандартной.

btw, term еще удобен тем, что в нем в качестве шела можно любую дурь запустить. довольно удобно. два окна, в верхнем сиквел правится, в нижнем psql запущен, к примеру.

ananas ★★★★★
()
Ответ на: комментарий от LX

> Еще вопрос - как сделать, чтобы в compilation буфере он перескакивал на нужную строку не по нажатии Return а по клику мышки? Мне бы так удобнее было.

В XEmacs это щелчок средней кнопкой. В GNU Emacs, думаю, тоже что-то подобное есть

awn
()
Ответ на: комментарий от anonymous

> А то говорят - хороший редактор для html/perl and etc - но ведь точно такой же и ViM. Ну, поднатужтесь, очень хочется объективное сравнение.

А какое может быть объективное сравнение между блондинками и брюнетками?

awn
()
Ответ на: комментарий от ananas

> btw, term еще удобен тем, что в нем в качестве шела можно любую дурь запустить. довольно удобно. два окна, в верхнем сиквел правится, в нижнем psql запущен, к примеру.

В данном случае sql-postgres, наверно, удобнее.

anonymous
()
Ответ на: Ответы всем от atoku

Я еще часто использую сворачивание/разворачивание блока кода, у меня это выглядит следующим образом:
(global-set-key (kbd "C-,") 'hs-hide-block);
(global-set-key (kbd "C-.") 'hs-show-block);

anonymous
()
Ответ на: комментарий от anonymous

>Скажите, в emacs есть история перемещений, то есть, чтобы после перехода в другое место файла (например, после поиска) или в другой буффер можно было вернуться на старое место? Иногда такой возможности сильно не хватает.

Об этом есть в первой статье. Для этого у меня некий аналог шелловской команды pushd реализован. :) Правда лишь с сохранением одной позиции. Нажали 'MM-Shift-/' и запомнили позицию. Потом можно искать или пойти вообще в другой файл. Команда 'MM-/' приведет обратно и при этом запомнит место откуда пришли. Снова 'MM-/' и вы прыгнули обратно. И так сколько угодно раз. Я это использую сто раз на дню.

atoku ★★★
() автор топика
Ответ на: комментарий от atoku

Ну хоть в чем-то vim впереди планеты всей. Хотя наверняка сейчас кто-нить объявится и скажет, что в emcas это есть.

anonymous
()
Ответ на: комментарий от anonymous

> Всегда мечтал про спец режим редактирования. Который включался бы по Tab при выделенном фрагменте текста. Я редактирую выделенный (возможно многострочный) фрагмент. Затем снова нажимаю Tab. Редактор выходит из этого режима. И при этом заменяет во всём тексте то что совпадало с ранее выделенным фрагментом на новый вариант. Я даже написал макрос для MS Word'a который такое делает. Только на Tab не смог его назначить :(

Не совсем то, но: narrow mode

1. выделяете регон (блок)

2. C-x n n (narrow-to-region)

3. теперь редактор думает, что этот "суженный" регион и есть весь буфер. Редактируете его как хотите.

4. C-x n w (widen)

Вот и всё.

А на Tab вешать не советую. Обычно это переключение раскладки клавиатуры (гораздо удобнее, чем Ctrl-Shift и иже с ними, должен заметить).

awn
()
Ответ на: комментарий от LX

> Очень бы хотелось увидеть подобную статью, про то, как прикрутить GDB к Emacs Имеется ввиду расстановка breakpoints, watch ну и подобные вещи.

Про GNU Emacs не скажу, а в XEmacs это "из коробки": Tools->Debug->GDB или по кнопке "Debug" на toolbar'е или 'M-x gdb' или 'M-x gdbsrc' по вкусу.

awn
()
Ответ на: комментарий от anonymous

> Скажите, в emacs есть история перемещений, то есть, чтобы после перехода в другое место файла (например, после поиска) или в другой буффер можно было вернуться на старое место? Иногда такой возможности сильно не хватает.

'jump-to-register' ('C-x j' в стандартной раскладке XEmacs) прыгает между буферами (при 'point-to-register' ('C-x /') сохраняется не толькопозиция в буфере, но и что это был за буфер).

awn
()
Ответ на: комментарий от ananas

> btw, term еще удобен тем, что в нем в качестве шела можно любую
дурь запустить. довольно удобно. два окна, в верхнем сиквел
правится, в нижнем psql запущен, к примеру.

Для этого лучше не term использовать, а sql-mode:

;;; sql.el --- specialized comint.el for SQL interpreters

;; Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.

;; Author: Alex Schroeder <alex@gnu.org>
;; Maintainer: Alex Schroeder <alex@gnu.org>
;; Version: 1.7.0
;; Keywords: comm languages processes
;; URL: http://www.emacswiki.org/cgi-bin/wiki.pl?SqlMode

awn
()
Ответ на: комментарий от awn

> А на Tab вешать не советую. Обычно это переключение раскладки клавиатуры (гораздо удобнее, чем Ctrl-Shift и иже с ними, должен заметить).

Дурость сморозил: раскладка вешается, конечно, на CapsLock. Но Tab -- это всё равно трогать не стоит, ибо гораздо полезнее в своём штатном варианте :-)

awn
()

Неточность в самой статье: по 'C-x 0' (delete-window) буфера не убиваются, они просто скрываются. Убить буффер -- это 'C-x k' (kill-buffer). Или штатные раскладки GNU Emacs и XEmacs (которым я и пользуюсь) так различаются?

awn
()
Ответ на: комментарий от awn

это был просто пример ;) но лично мне удобнее в psql

ananas ★★★★★
()
Ответ на: комментарий от awn

>Неточность в самой статье: по 'C-x 0' (delete-window) буфера не убиваются, они просто скрываются. Убить буффер -- это 'C-x k' (kill-buffer). Или штатные раскладки GNU Emacs и XEmacs (которым я и пользуюсь) так различаются?

Нет, не отличаются. Это неточность в статье (хотя там вроде "пришибаются" или "закрываются" - но я не помню уже ;). Пофиксю через 12 часов ;) Кстати, 'C-x k' я забыл включить в список команд, которые я часто использую.

anonymous
()
Ответ на: комментарий от atoku

2atoku & 2awn (04.06.2004 11:37:27): Это все понятно, хотелось бы чтобы при больших перемещениях запоминание позиции происходило автоматически. Самому завести список и расставить хуки, которые его будут заполнять?

anonymous
()
Ответ на: комментарий от anonymous

читайте доку на narrowing. расписано во всех учебниках по emacs с незапамятных времен.

---vk

anonymous
()
Ответ на: комментарий от anonymous

> Это все понятно, хотелось бы чтобы при больших перемещениях запоминание позиции происходило автоматически. Самому завести список и расставить хуки, которые его будут заполнять?

Недостаточно информации. Что понимать под "большим перемещением"? Например, 'beginning-of-buffer' ('M-<') и 'end-of-buffer' ('M->') запоминают старую позицию в mark-ring'е автоматически.

См. info node 'Mark Ring' для деталей.

Так же некоторые команды имеют своё собственное кольцо/стэк позиций. Например, если прыгаешь по тэгам ('find-tag' ('M-.'), 'tags-loop-continue' ('M-,')) -- то "пройти путь обратно" можно по 'pop-tag-mark' ('M-*').

awn
()
Ответ на: комментарий от anonymous

Положить текущую позицию в стек - `C-x <SPC>'

Прыгнуть на позицию в вершине стека - `C-u C-x <SPC>'

Попробуй также - http://lgarc.narod.ru/himarks-mode.el - мода для подкраски позиций и немного модифицированный `C-x <SPC>'

удачи!

lg ★★
()

Грустно читать сообщения в форуме из серии "VIM гавно, нет emacs гавно". Просто похоже процент настоящих программеров в форуме стремится к нулю. Имакс замечательная среда разработки. Единственный конкурент для него под Вынь - это MultiEdit. Кто знает что это такое - меня поймет.

anonymous
()
Ответ на: комментарий от anonymous

Я вспомнил, чего нет в имаксе: фолдинга как в Vim'е. Мне иногда не хватает. Narrowing и скрытие не совсем то.

hbee ★★★★
()

Спасибо за статью.

Есть с ecb одна засыпка. Я не знаю как отключить truncate в буфере редактирования. Настройки для остальных буферов в ecb есть, а для буфера редактирования - нет. :(

bzImage
()
Ответ на: комментарий от hbee

> Я вспомнил, чего нет в имаксе: фолдинга как в Vim'е. Мне иногда не хватает. Narrowing и скрытие не совсем то.

Ну есть еще hideshow и еще пара подобных модулей. Правда такой херни как крестики и линии у левой границы (аля kde) вроде действительно нет, правда насколько помню и в виме этого не было.

Вот кстати ссылка полезная любителям емакса: http://www.emacswiki.org/ в частности http://www.emacswiki.org/cgi-bin/wiki/CategoryOutline

anonymous
()
Ответ на: комментарий от lg

> без проблем. Конкретно сформулируй feature request

Если текст содержит точно повторяющиеся фрагменты на несколько строк то я хочу редактировать их всех одновременно (синхронно).

> и приведи пример

Допустим есть текст из 7-ми строк. Причём 1-я, 4-я и 6-я полностью совпадают междусобой. И 2-я с 7-й тоже. Остальные ни на что не похожи. Вот так:

dirty

rol

++

dirty

--

dirty

rol

Я выделяю две строки сразу. Вот такие:

dirty

rol

И нажимаю Tab (в Ворде97 на Tab повесить не получилось). После чего наблюдаю например "марширующие чёрные муравьи" вокруг этих строк (так было у меня в ВинВорде но для консоли нужно конечно что-то другое).

Далее редактирую эти строки. И при этом вижу соседние. Т.е. редактирую видя контекст. В результате получаю например три строки. Вокруг которых по прежнему "муравьи". Вот так:

goodboy

less

rol

Теперь я снова нажимаю Tab. И получаю текст уже из 9-ти строчек. Вот так:

goodboy

less

rol

++

dirty

--

goodboy

less

rol

Всё. Как видим например 4-я строчка не изменилась хоть и стала теперь 5-й. Потому что она "вне контекта". Не знаю можно ли такое в emacs сделать.

anonymous
()
Ответ на: комментарий от anonymous

можно конечно .. бегающих муравьев конечно не получишь(кстати я так и не понял что за муравьи) но выше описанное отличается от моей первой реализации лишь тем что видно остальной текст и бегают муравьи?

lg ★★
()
Ответ на: комментарий от lg

> отличается лишь тем что видно остальной текст и бегают муравьи?

Возможно. Я сейчас проверю. А твой код нужно в .emacs положить?

> кстати я так и не понял что за муравьи

Selection.Font.Animation = wdAnimationMarchingBlackAnts

Это в MS Word 97 такая анимация текста есть. Такие маленькие черточки вокруг текста бегают по часовой стрелке. Очень прикольно.

anonymous
()
Ответ на: комментарий от hbee

> Я вспомнил, чего нет в имаксе: фолдинга как в Vim'е. Мне иногда не хватает. Narrowing и скрытие не совсем то.

M-x folding-mode

awn
()
Ответ на: комментарий от lg

> отличается лишь тем что видно остальной текст и бегают муравьи?

Да. Супер. Только ещё курсор надо обязательно оставлять на месте (где был). И ещё если я меняю test2 на test22 то у тебя выходит что первое вхождение почему-то превращяеться в test222 Думаю это определённо баг :)

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.