LINUX.ORG.RU

асилить емакс?

 ,


4

2

Постепенно, использование нескольких редакторов под каждую задачу начинает тяготить, таки прихожу к тому что придётся асиливать емакс, т.к. там судя по всему всё необходимое мне есть. Но с чего начать и как это сделать? Стоковые настройки у него ещё кошмарней чем у старых блендеров, и таким образом совершенно неюзабельны. Например, я так и не смог найти как просто выделить участок текста. Но смущает прежде всего обилие неочевидных хоткеев, которые ещё и пересекаются с системными. Мне эти хоткеи неудобны и тяжелы для запоминания, гораздо более удобным оказывается управление с помощью команд с автодополнением, ala blenderовское [space]-меню. Но, насколько я понял, всё это настраиваемо, посему вопрос, есть ли в природе адекватные пресеты и мануалы как всё это запилить с нуля в более-менее юзабельное состояние?

★★★★★

Последнее исправление: thunar (всего исправлений: 1)

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

У меня LSP вообще не сбоил.

LSP сервер начал регулярно падать со сбросом корки

От реализации сервера же зависит, при чем тут сам LSP.

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

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

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

стоит только обмазать всё хорошенько шаблонами

Именно. Как только начинается какая-нибудь магия, в любом языке, все эти умные автодополняторы и рефактерилики нюхают бебру, потому что из синтаксиса уже не выводится кто на ком стоял, нужно понимать контекст. Может быть появится какая-нибудь балалайка в духе copilot, но пока самое надёжное это тупо по токенам, или даже дидовский поиск/замена. Тут уж ты точно все упоминания найдёшь, даже по частичному совпадению.

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

Только что попробовал. Оно и в терминале работает (Ubuntu 18.04). Странно. Возможно топикастер выкопал emacs десятилетней давности...

Evgueni ★★★★★
()
Последнее исправление: Evgueni (всего исправлений: 2)
Ответ на: комментарий от thunar

Посмотри значение опции shift-select-mode (должно быть t). Можно через менюшку Options → Customize emacs → Specific option

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

переименовывать символы вручную

Это без LSP решается.

Как?

Но как это решается с LSP? Интересует конкретная последовательность действий (доку читал). И разговор зашёл о LSP так, как будто не имеет значения, о каком конкретно сервере и для какого языка идёт речь? Насколько я смог заметить, clangd имеет несколько более масштабную реализацию, чем, например, некоторые серверы для Python.

nasecom
()
Последнее исправление: nasecom (всего исправлений: 2)
Ответ на: комментарий от no-such-file

И что в ней плохого? Ты против трудового народа? Против общественных благ?

BceM_IIpuBeT ★★☆☆☆
()

Мне вот интересно, чем вы там таким с текстом занимаетесь, что вам нужны позарез всякие вимы, емаксы и прочее? Я вот прикинул, операции которые используются в редакторе, это:

  • Прыгать по словам, сточкам, абзацам;

  • Вырезать/копировать/вставлять слова, строчки, абзацы;

  • Простой поиск, замена, взад-вперед;

  • Операции со столбцами.

Больше вроде ничего и не нужно. А для этого любой редактор годиться, хоть gedit.

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

Если в VS Code, то самый ламерский способ: щелкнуть по символу правой кнопкой мышки, появится контекстное меню, выбрать в нем пункт Rename Symbol, ввести новое имя.

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

Оказалось, что не так уж мне нужно всё это LSP барахло, не страдаю.

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

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

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

Линкус-фанбоев это напоминает. Ведь Лынукс это йадро, лал.

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

Ну я хз почему ты такой криворукий, transient mark давно включено из коробки. Специально проверил через emacs -Q, работает.

no-such-file ★★★★★
()
Ответ на: комментарий от thunar

и мышью не выделяет.

Только сейчас заметил. Если морда графическая, то очень и очень странно, так как я _никогда_ на такое поведение не натыкался.

Может ты специально отключил выделение? В смысле отображение этого самого выделения. Давным давно были тёрки вида «нефиг любое выделение текста в emacs тащить ибо он на одну миллисекунду медленнее из-за этого гигабайтный файл открывает». Переименуй .emacs в .emacs.old и посмотри что будет по умолчанию делать (ну или запусти emacs -q).

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

Переименуй .emacs в .emacs.old и посмотри что будет по умолчанию делать (ну или запусти emacs -q).

Всё стоковое, по умолчанию — запустил с -q — точно так же, ни мышкой, ни шифтом не выделяет. В консольном (-nw) работает, но мне графика нужна.

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

Очень странно. Скажи хоть что за версия emacs и что за графическая морда используется.

Evgueni ★★★★★
()

Начинать освоение Emacs нужно со встроенной системы помощи. Такого больше нет нигде. Emacs полностью интроспективный, дaже на уровне исходников «C» нативных функций Emacs(если указать путь к исходникам в специальной переменной).

Модные сейчас конфигурации как Doom или Spacemacs не обязательно сразу ставить. Я их не использую так как со временем освоил Elisp для написания своей конфигурации, простая функция проверки установленных пакетов.

tp_for_my_bunghole
()

Кстати в версии 28 уже есть нативная компиляция Elisp.

До этого казалось что всё быстро, но в 28 всё летает, запуск моментальный с большим числом библиотек - при использовании пакета desktop что восстанавливает именованные сессии при запуске.

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

Всё стоковое, по умолчанию — запустил с -q — точно так же, ни мышкой, ни шифтом не выделяет. В консольном (-nw) работает, но мне графика нужна.

В контексте освоения Emacs, единственной интроспективной IDE:

М-х customize-themes

Можешь переключить на любую другую тему. Может быть цвет выделения такой же как у фона.

Далее.

M-x list-faces-display

Откроет буфер со всеми существующими цветовыми настройками(font faces), с цветовой индикацией.
Там region определяет вид и цвет выделенного текста.

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

Графику, стоковая версия из убунты 1804.

Ubuntu использовал несколько лет назад, но помню что там с Emacs иногда были проблемы, почему-то. Какие-то странные версии пакетов, lucid что-то там.

Также использование Cairo(векторная графика) в Emacs кажется до сих пор экспериментально. Другая альтернатива это Skia(Chrome, Firefox, Android, Flutter), и её в Emacs не будет если самому не внедрять.

Но компиляция Еmacs элементарна. Чтобы иметь стандартный Emacs а любой OS.

git clone https://github.com/emacs-mirror/emacs
cd emacs
git checkout emacs-27.2
autoreconf
./configure
make
sudo make install

Посмотреть с какими опциями собран любой Emacs, интроспекция:

C-h v system-configuration-options

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

Да, Ubuntu(Debian) ещё предлагает в виде deb пакетов пакеты Emacs(elisp библиотеки/плагины). Это тоже не нужно, они все ставятся в пакетном менеджере Emacs:

M-x list-packages

Там и сотни тем на любой вкус(которые после установки можно модифицировать с подробным интерфейсом).

tp_for_my_bunghole
()
Ответ на: комментарий от no-such-file

Было б удобней, LSP бы не появился.

anonymous
()

Мне эти хоткеи неудобны и тяжелы для запоминания

Не надо запоминать все хоткеи!! Это уже уровень рефлексов, вырабатываются. Запоминать можно некоторые базовые фукции к которым эти хоткеи назначены.
Все команды можно найти интроспекцией, посмотреть к какой комбинации клавиш на данный момент привязана.

Лучше переназначить клавиши:

CapsLock -> Alt
Left Alt -> Control

Потому что так Control всегда будет под левым большим пальцем.
Для меня это было [b]ключом[/b] к полному переходу на Emacs несколько лет назад.

Emacs как музыкальный инструмент, удовольствие получаешь после освоения, и удовольствие после предоления не исчезает со временем. Музыкальные инструменты настраиваются, но настройка обычно элементарна для того кто привык к инструменту.
Открываешь пакеты как Helm, desktop, команда rgrep. Терминал в Emacs удобнее, весь текст вывода доступен, поиск, копирование:

https://www.youtube.com/watch?v=EflpsFjkzxU

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

Потому что так Control всегда будет под левым большим пальцем

Я пробовал. Ну такое. Полезнее научиться нажимать Ctrl противоположной рукой. Но лучше всего конечно педаль.

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

Я использую средний большой палец. Он что угодно control.

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

И вот как раз скриптовые движки обоих вышеуказанных редакторов не вывозят, они хуже браузерного V8, именно поэтому Vim у меня подыхает, когда я пытаюсь открыть небольшой дамп в 1.4 гига

Emacs легко открывает гигабайтные файлы и скролит их.

Дело в том, что и Vim, и Emacs работают по-сути также: у них все плагины на скриптовых языках

Все двигатели внутреннего сгорания работают по-сути также.

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

А я расскажу как у меня это работало - при достижении некоторой сложности проекта LSP сервер начал регулярно падать со сбросом корки, получать от него стабильный комплит и go to defenition стало невозможно. Так до меня дошло, что простой комплит по токенам + какие-нибудь таги - много надёжней и быстрее. Оказалось, что не так уж мне нужно всё это LSP барахло, не страдаю.

LSP это протокол, аккуратно стандартизированный и документированный. Спасибо MS, хоть за это.

Написать сервер LSP ты можешь даже на regexp, grep, и потом просто выбирать какой результат правильный применяя какие-то свои алгоритмы(например поиск в них определения по словам «fn», «func», скобкам параметров).
Если в твоём сервере будут баги состоящиее в несоответствии стандарту протокола, то это не в LSP проблема.

Это как винить HTTP за то что какой-то сайт выдаёт 404.

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

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

Решение элементарно. Пишешь свой компилятор который не генерирует исполняемый код а только смотрит «что есть что» во время компиляции и сохраняет это в базу. Видит вывод после макропроцессора, какие ветки макросов активны(для подсветки кода). В Emacs есть плагин ggtags для «C»(в основном) у которого уже есть готовый стандарт базы данных в виде файлов именно для этого, то есть остаётся только сделать этот компилятор заполняющий эту базу.

Систему сборки C++ проекта нужно только пропустить через этот компилятор вместо GCC/Clang - и точная аналитика по всему проекту готова в виде файла для ggtags. Вообще это одна из интересных областей для написания кода, компиляторы, и при этом нет трудной рутинной части в генерации нативного кода. Но то что это до сих пор не начали говорит больше о тех кто пишет C++, они и так страдают на работе наверное и мотивации нет.

В проект RTags продолжают коммитить, но не попадались на пути восхищения этим подходом. Что и как там работает - непонятно.

Есть в Emacs и cedet со своим форматом, хорошим интерфейсом и API, автор Alex Ott упоминаемый на первой странице комментов. Проект к которому можно было бы пристроить анализатор-компилятор.
https://alexott.net/ru/index.html

tp_for_my_bunghole
()
Последнее исправление: tp_for_my_bunghole (всего исправлений: 2)
Ответ на: комментарий от tp_for_my_bunghole

Сборщики пакетов в дистрах ставят какие-то опции, но они обычно не нужны.

такие нужны:

--disable-libsystemd \
--without-selinux \
--without-gconf \
--without-gsettings \
--without-libotf \
--without-m17n-flt \
anonymous
()
Ответ на: комментарий от tp_for_my_bunghole

Решение элементарно. Пишешь свой компилятор

Да, куда уж проще. Это нужно быть совсем отчаянным чтобы в такое ввязаться.

который не генерирует исполняемый код а только смотрит «что есть что» во время компиляции и сохраняет это в базу

Это разумно делать лишь как бэкэнд компилятора и поддерживаться должно той же командой, ибо АСТ вещь непостоянная, новые фичи регулярно вкручивают. Ну и подход сам нерабочий, ибо надо ведь с пространствами имён? Вот нагенерил ты базу, и дальше по коду пишешь:

class Some_class {
    void fn();
};
// здесь генерим базу, например так: g++ -gen_base
Some_class q;
q.

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

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

Если резюмировать, то все эти интеллектуальные помогаторы годятся лишь чтобы впечатлить самых маленьких. Концепция LSP серверов - хлам, её задача держать в фоне монстра, если язык с пространствами - смотри абзац выше, если без (Си без крестов, например) - то тем более не нужно.

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

Если резюмировать, то все эти интеллектуальные помогаторы годятся лишь чтобы впечатлить самых маленьких. Концепция LSP серверов - хлам, её задача держать в фоне монстра. ты

LSP это протокол, аккуратно стандартизированный и документированный. Спасибо MS, хоть за это. - tp_for_my_bunghole

Ну и кто здесь маленький?

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

Ты думаешь я не знаю, что ЛСП это протокол? А сервер работающий по этому протоколу не ЛСП сервер что ли? Значит http сервер назвают таковым лишь неучи?

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

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

В Emacs до LSP это былo уже лучше всего реализовано.

Если резюмировать, то все эти интеллектуальные помогаторы годятся лишь чтобы впечатлить самых маленьких. Концепция LSP серверов - хлам, её задача держать в фоне монстра, если язык с пространствами - смотри абзац выше, если без (Си без крестов, например) - то тем более не нужно.

Что-то не сходится. LSP сервер для C++ написанный на C++ часто падает, а хлам это почему-то концепция LSP.

В Emacs на выбор:
классический подход Ctags(как бэкенд для ggtags).
Cedet со своим парсером, интерфейсом, кэш.
LSP к серверу Clang.

В Emacs 28 с нативной компиляцией Elisp может возродиться интерес к Cedet. Мне нравилась идея Cedet, стабильно.

Все новые C++ стандарты флагмански внедряет до сих пор только GCC. У Apple с их миллиардами свой внутренний старый Clang с базовыми возможностями языка C++. На игровых консолях примерно то же.

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

Да я не против Emacs’а, успехов ему, жаль что в своё время не дождался нативной компиляцией Elisp, его тормознутость отпугнула меня.

Что-то не сходится. LSP сервер для C++ написанный на C++ часто падает, а хлам это почему-то концепция LSP.

Без разницы на чём оно там написано, они решают ненужную задачу. Хорошо, что ГЦЦ не кинулся за шлангом учиться всей этой хипстерской докомпиляции, пусть и немного по другим причинам.

Все новые C++ стандарты флагмански внедряет до сих пор только GCC. У Apple с их миллиардами свой внутренний старый Clang с базовыми возможностями языка C++.

Да все компиляторы активно пилят новые стандарты и грядущий 23 в том числе, и шланг, и мелкомягкие. Что там Эпл берёт за основую для своих поделок - мне мало о чём говорит, когда-то они и ГЦЦ использовали в качестве фронтэнда к ЛЛВМ, но как минимум std17 они умеют почти полностью. Ну если настаиваешь, что поддерживать бэкэнд - дело плёвое, спорить не буду, я бы за это не взялся, к тому же говорил, что работать это будет не очень.

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

его тормознутость отпугнула меня.

Сомневаюсь что ты пользовал Emacs, и что знаешь какое оно.

Нативная компиляция Elisp в Emacs 28 реализована с помощью libgccjit.so. Делают это для расширения применения Elisp, ничего не «тормозило».

tp_for_my_bunghole
()

Да как-то бессмысленно. Если есть влечение какое-то, то можно.

А если чисто параклита — то vim всегда пригодится.

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

Сомневаюсь что ты пользовал Emacs, и что знаешь какое оно.

По нику догадался? Сначала юзал емакс, но тормознутость на больших файлах выдавила меня на vim, тогда ещё никакой компиляции в натив не было.

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

Сначала юзал емакс, но тормознутость на больших файлах выдавила меня на vim, тогда ещё никакой компиляции в натив не было.

Выдумываешь на ходу. Ты никогда не использовал Emacs.

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

Если есть влечение какое-то, то можно.

Мне Емакс очень зашел. Хотя я не красноглазый задрот. Ну да, некоторых вещей не хватает (например: подсветки результатов поиска в скроллбаре), но в целом - огонь. Отдельно доставляет очень крутое и дружелюбное коммьюнити и действительно понятная документация.

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

А если чисто параклита — то vim всегда пригодится.

А вот вим - это какая-то херота. Сложный, с убогой документаций, написанной аутистами для аутистов, да еще иногда начинает глючить и ввыжирать по 3 гига памяти на файле из 50 строчек (пока не удалишь какой-то там временный файл).

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

да госсподи, сравнить ущербную помоечную вимвики, захощенную на мегапомоечном, обвешанном рекламой по самые гланды, fandom.com, с няшненькой, аккуратненькой, на своем собственном сайте emacs wiki

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

а редактор туда когда завезут? evil не канает, его нет в поставке, или пианистам не понять простых смертных?

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

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

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

а причет тут пианисты? «инопланетность» емаксовских кейбиндингов это миф. а вот скакать по вимовским режимам - это да. тут надо наглухо головой кукануться, чтоб к такому привыкнуть

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

Вим та еще херня, но уж всяко лучше чем этот умакс. Им вообще не понятно кто пользуется.

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