LINUX.ORG.RU

Emacs и несколько буферов

 ,


0

2

Привет. В общем, ищу какое-нибудь расширение/киллерфичу для редактирования сразу нескольких файлов/буферов/файла+временного буфера и т.д.

Допустим, есть два буфера с текстом.

При этом некоторые абзацы или блоки в них между собой совпадают, а некоторые нет(т.е. буферы частично идентичны, но только частично).

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

На данный момент я знаю только multiple-cursors, но это всё же немножко не то. Есть что-то более интересное, о чём я не знаю? Или надо делать свой велосипед? Может кто подскажет чего.

Заранее спасибо.

Не emacs'er я, но как на счет просто записать макрос изменения параграфа, а потом применять его на тот же параграф в другом файле?

Просто с автоматизированием процесса возникает много вопросов, например, а что если параграф встречается в другом файле дважды. И вообще, почему мы завязываемся именно на параграф, а не на участок текста? Не думаю, что такой плагин существует.

Kroz ★★★★★ ()

Воистину «хочется странного».

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

Zmicier ★★★★★ ()

ты не редактор случайно? имеется ввиду не ПО а род деятельности

Я когда редакторством занимаюсь - юзаю meld, идентичные куски текста НЕ подсвечены, изменения в одном буфере приводят к подсветке, и тогда ты можешь легко вручную изменить (если нужно) текст в другом буфере.

reprimand ★★★★★ ()

Ну вообще multiple-cursors плюс открыть один и тот же буфер в нескольких окнах — это то что ты описываешь.

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

Таки в данном случае не ПО(почему меня это волновать вообще и начало), но для ПО задумка тоже применима.

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

Цели?

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

Или редактируешь что-то на естественном языке с одним-двумя-тремя черновиками(при этом черновые версии сохраняются). Или хочешь скинуть друзьям 2-3 варианта текста с просьбой ответить «А как лучше?», и хочешь найденные ошибки править сразу везде.

Или пишешь что-то в org-mode с заметками, а потом из этиз заметок генеришь *.txt, и потом правишь два взаимосвязанных файла.

Много применений может быть.

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

Буферы/файлы могут быть разными. Так что тут скорее заморочки с ediff, но получается не совсем удобно это всё.

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

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

Зачем? Переоткрой тот же буфер в новом фрейме, старый фрейм запомнит запомнит место, где ты остановился, все исправления будут совместными. emacsclient тебе в дополнительную помощь.

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

Ты не понял, я хочу сначала выделить все найденные ошибки в файле(не отвлекаясь на их правку), а потом уже их последовательно править. А твой вариант подходит только если проблемное место одно.

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

На самом деле мой вариант как раз подходит (с ограничениями, но всё же)

Но вообще есть indirect-buffer'ы, какую-то часть необходимой тебе функциональности они покрывают.

aedeph_ ★★ ()

поищите на тему emacs kdiff3

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

Цели?

Ну да, судя по ответам, я не зря их спросил, — имеет место выраженная X-Y Problem.

пишешь что-то в org-mode с заметками, а потом из этиз заметок генеришь *.txt, и потом правишь два взаимосвязанных файла

Ну, это самое простое и очевидное. Так просто не делается. Правятся всегда только исходники (в вашем случае — org), все остальное (txt, tex, html, ...) из них каждый раз пересобирается.

шаришься такой по коду, находишь проблемное место, отправляешь его во временный буфер и идёшь дальше, когда таких проблемных кусков находишь достаточно, правишь их все один за другим в том самом временном буфере (разумеется, попутно меняя основной код)

А это какая-то откровенная наркомания.

Если все, что вам нужно — это *отметить* нужные места, чтобы к ним затем вернуться, то что может быть проще? Не спрашиваю даже, чем старые общепринятые метки типа FIXME вас не устраивают. Ну, к примеру, тем, что хочется вам отмечать место с точностью до буквы. Тогда есть, к примеру, сугубо емаксовые «закладки» — поищите, были программки для перехода к следующей / прошлой закладке в файле.

хочешь скинуть друзьям 2-3 варианта текста с просьбой ответить «А как лучше?», и хочешь найденные ошибки править сразу везде

Вот это разве что не самая очевидная вещь. Вместе с тем все равно понятно, что это делается иначе, чем вы думаете. Хранятся все варианты, разумеется, в одном файле рядом. А если их одновременная видимость мешает вам сосредоточиться, то их надо временно скрывать, оставляя по одному. Совсем готовой программки для этой цели я не видел, но ближайший аналог, что наверное можно было бы взять за основу — hide-ifdef-mode.

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

Тоже вариант, по-видимому если таки стану пилить велосипед, то пригодится. Спасибо.

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

Для сокрытия лишнего есть outline-mode, это понятно.

Что значит «так это не делается», «наркомания», «это делается иначе»? С текстом нужно работать так, как это удобно, а не как позволяют ограничения инструмента, в этом по-большому счёту смысл использования vim/emacs или других тонконастраиваемых программируемых инструментов.

А если у меня 10 штук взаимосвязанных org-mode файлов, в которых совпадает одна-единственная заметка?

Захламлять комментариями синтаксически-корректный, рабочий, но, допустим, не самый красивый код тоже такое себе.

Ну и так далее.

raven_cler ★★ ()

Как советовали выше bookmarks и какой-нибудь vcs.

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

для сокрытия лишнего есть outline-mode

Да? А я, вероятно, упустил. Как? Там, по-моему, только иерархия, а не блоки а-ля #ifdef.

Что значит «так это не делается», «наркомания», «это делается иначе»?

В первом и третьем никакого скрытого смысла нет. А «наркомания» — это тутошний диагноз, что ставят решениям и подходам из разряда «нарочно не придумаешь». Ничего оскорбительного не подразумевается.

нужно работать так, как это удобно

Вот именно.

А если у меня 10 штук взаимосвязанных org-mode файлов, в которых совпадает одна-единственная заметка?

То #+INCLUDE, разумеется.

и так далее

И что «так далее»?

Zmicier ★★★★★ ()
Последнее исправление: Zmicier (всего исправлений: 1)
Ответ на: комментарий от raven_cler

вот это уже похоже на правду

Это вариация на тему multi-occur который есть из коробки, но ты КМК хочешь нечто другое.

Я думаю тебе лучше запилить свой несложный велосипед: команду, которая вставляет во временный diff-mode буффер выделенный текст в diff формате, и команду прохода по буферу с diff-mode с поиском-заменой по всем буферам заменяя первый вариант на второй (и также обратно).

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