Страницы

Поиск по вопросам

Показаны сообщения с ярлыком emacs. Показать все сообщения
Показаны сообщения с ярлыком emacs. Показать все сообщения

суббота, 1 февраля 2020 г.

Как вводить команды в Emacs?

#linux #emacs


Недавно начал пользоваться Emacs и встретился с проблемой - табуляция слишком маленькая
(2 пробела). Поискав инфу вычитал, что в emacs нужно прописать setq-default tab-width
4, чтобы изменить табуляцию с двух на четыре пробела. Но не понял как и где это нужно
писать. Где и как это нужно писать?    


Ответы

Ответ 1



Это вам надо указать в конфигурационном файле, который находится в директории пользователя /home/<имя пользователя>/.emacs файла по умолчанию может не быть. Чтобы выполнять команды в emacs, используйте комбинацию alt + x для вызова командной строки. Чтобы немного разобраться с emacs, посмотрите справку.

Ответ 2



Каждая команда (например find-file или next-line) в Emacs является Emacs Lisp функцией. Но помимо команд (которые могут быть или не быть привязаны к клавиатурным комбинациям), есть и много других функций. В Emacs встроен Emacs Lisp интерпретатор, а значит каждую функцию можно выполнить в любой момент. uvlad уже показал, как сделать так, чтобы функция выполнялась при каждом запуске Emacs. Но если нужно выполнить функцию временно — т.е. при перезагрузке Emacs изменение, сделанное функцией, сбросится — то можно нажать Alt+Shift+;. В минибуфере можно будет ввести (setq-default tab-width 4). Скобки обязательны, потому что это синтаксис Лиспа: (название-функции аргумент1 аргумент2 ...). Если хочется вызвать полноценный интерпретатор чтобы вводить выполнять разные функции Emacs Lisp, то он называется IELM, и его можно вызвать, если нажать Alt+x и ввести ielm. Не все функции можно вызвать через Alt+x, только интерактивные, но т.к. их великое множество, то я рекомендую почитать мануал о вызове интерактивных команд: Running Commands by Name @ GNU Emacs Manual.

вторник, 7 января 2020 г.

Редактор с разбиением окна на буферы как в vim или emacs

#редактор_текста #vim #emacs #linux


Интересует вопрос - существуют ли редакторы, под Linux, в которых есть возможность
разбить одно окно редактирования файла, на два, как это можно в vim или emacs, потому
что очень часто полезно видеть перед собой одновременно два исходника. 
И ещё хотел бы узнать, чтобы не создавать новый вопрос - чем emacs или vim лучше
(особенно в наше время)? Все говорят, что они настраиваемы до неузнаваемости, но в
чем выражаются эти настройки. Что можно полезного извлечь (для веб-мастера к примеру)
из этих редакторов, чего нет в других? 
P.S. Для себя я пока усвоил только разбиение окна на буферы.    


Ответы

Ответ 1



Из известных мне редакторов под линукс это умеют делать ещё два - QtCreator и Code::Blocks. Это конечно грубо, назвать IDE редактором, но мы же на форуме программистов, здесь в основном для кода и используются редакторы. Эти два умеют как просто сделать "два (и более) окна просмотра одного файла", так и разделить рабочее пространство для редактирования нескольких файлов. Также это умеет делать SublimeText (он платный, если что). Но там эта функция немного специфичная. Нужно в меню View->Layout выбрать способ разделения рабочего пространства, а после этого можно перетаскивать вкладки. Кстати, IDEA также умеет разделять рабочее пространство (меню Window->Editor Tabs). чем emacs или vim лучше (особенно в наше время)? Авторы этих редакторов в свое время поняли, что напихать все в один редактор сложно и не нужно и сделали гибкую систему плугинов (хотя это очень спорный вопрос - в эмаксе это своя модификация лиспа, а в виме ещё до недавно свой язык. Сейчас можно на питоне дописывать, но не полностью все). В других редакторах пытаются втиснуть все и сразу.

воскресенье, 22 декабря 2019 г.

Emacs: как устанавливать пакеты?

#emacs


Хочу попробовать emacs, но без встроенного файлового браузера, по-моему, вообще невозможно
работать (dired - подходит, когда работаешь с двумя, тремя файлами, но когда работаешь
с десятком, по-моему, это нереально).  
Хочу установить Emacs-nav и не врублюсь, как это сделать. В list-packeges его нет.
Делаю по такому туториалу. Там сказано ввести определенный код в ~/.emacs. У меня вообще
нет такого пути, есть  ~/.emacs.d. Захожу и не знаю, куда надо ввести код, который
в туториале, у меня там только файлы auto-save-list, elpa, eshell. Куда вводить-то? 
Еще надо скачать там архив. Я его скачала и не знаю, куда его девать. Вообще непонятно. 
Всем спасибо за ответы.    


Ответы

Ответ 1



Так создайте этот файл с указанным содержимым. cat >> ~/.emacs paste emacs-lisp code from URL ^D Потом все настройки emacs-а будете добавлять туда. А вообще-то я, например, использую emacs параллельно с Thunar (файл-манагер в xubuntu) или Nautilus в ubuntu или каким-нибудь другим GNOME-файл-манагером в др. Linux-ах. Для открытия файла мне Ctrl-x Ctrl-f + (дополняет имена файлов) вполне хватает. Опять же из командной строки всегда можно любую *nix-команду выполнить (Meta-!). И для начала, запустите emacs, наберите Ctrl-h t и читайте туториал.

Ответ 2



dired прикольная штуковина, если почитать про все ее возможности. Если нужно отрыть файл, то ничего делать грандиозного не надо: C-x C-f Много файлов: C-x C-f ~/foo/*.c RET Если нужно визауальное решение гляньте тут https://github.com/jaypei/emacs-neotree https://www.emacswiki.org/emacs/Sunrise_Commander Не настроенным Emacs пользоватся конечно можно, но есть куча уже подогнанных и отлаженных сборок: http://spacemacs.org/ https://github.com/purcell/emacs.d Если отвечать на вопрос, заданный в названии темы: M-x package-list-packages

Ответ 3



Если только начинаете - используйте менеджер пакетов, например MELPA. Там около 4200 разных пакетов. Описание установки тут: http://melpa.org/#/getting-started По сути, если вы еще в самом-самом начале настройки, достаточно удалить/перенести старый файл .emacs и создать новый со следующим содержимым: (require 'package) (let* ((no-ssl (and (memq system-type '(windows-nt ms-dos)) (not (gnutls-available-p)))) (proto (if no-ssl "http" "https"))) (when no-ssl (warn "\ Your version of Emacs does not support SSL connections, which is unsafe because it allows man-in-the-middle attacks. There are two things you can do about this warning: 1. Install an Emacs version that does support SSL and be safe. 2. Remove this warning from your init file so you won't see it again.")) ;; Comment/uncomment these two lines to enable/disable MELPA and MELPA Stable as desired (add-to-list 'package-archives (cons "melpa" (concat proto "://melpa.org/packages/")) t) ;;(add-to-list 'package-archives (cons "melpa-stable" (concat proto "://stable.melpa.org/packages/")) t) (when (< emacs-major-version 24) ;; For important compatibility libraries like cl-lib (add-to-list 'package-archives (cons "gnu" (concat proto "://elpa.gnu.org/packages/"))))) (package-initialize) После этого перезапустите emacs А перечень пакетов тут: http://melpa.org/#/ Далее всё просто. Нажимаете M-x (Alt+X в emacs терминологии) и вводите команду: package-list-packages После чего получите список все доступных пакетов от встроенных (GNU), до тех что установили (melpa). Подводите курсор к нужному, нажимаете Enter, открывается дополнительное окно где нажав на ссылку Install можно установить любой. Читайте описание к каждому пакету. Какие-то пакеты сразу вписываются и запускаются как влитые, какие-то для запуска нужно прописывать в .emacs, ну или запускать внутренней командой. Думаю, что разберётесь, так как всё, как правило, очень хорошо обписано. Особыне знания lisp в этом плане не особо требуется и устанавливается всё довольно легко и без ошибок. Описание как подключить пакетный менеджер Список пакетов для emacs

суббота, 14 декабря 2019 г.

Emacs. Можно ли переназначить “без последствий” часть клавиатурных сокращений?

#vim #emacs #hotkeys


Можно ли в Emacs переназначить часть операций с текстом/файлами под более привычные(удобные)
для себя комбинации клавиш, без конфликтов с другими командами? Или стоит изучить те
которые по умолчанию? Пробовал Vim, но там ІМНО не стоит изменять хоткеи по умолчанию,
да и там все довольно логично,да и много команд реализуются одной клавишей, так что
не увидел особой необходимости в замене.
    


Ответы

Ответ 1



Стандартные сочетания архаичны и загадочны, существует несколько подходов в основе. Хорошие примеры: Evil Mode (vim-аддиктам), Spacemacs, Ergo Emacs, Boon, fingers. Технической проблемы тут нет, это вопрос эргономики и управления сложностью конфигурации. Вот из Vim на EMACS можно перейти только благодаря Evil-mode, ценой громоздкого конфига, однако с божьей помощью можно отказаться от Evil-mode, сохранив при том модальность. К вопросу, HJKL по-умолчанию в EMACS выполняют несущественные функции (С-h дублируется ), следовательно, такое можно и перемапить. FBNP-навигацию же, естественную для EMACS, и C-x-... M-x-..., C-c-..., повсеместно используемое - проще оставить нетронутым: (use-package god-mode :bind ( ( "M-i" . god-local-mode ) ( "" . god-local-mode ) ( "C-j" . next-line ) ( "C-k" . previous-line ) ( "C-h" . backward-char ) ( "C-l" . forward-char ) ( "C-d C-f" . delete-forward-char ) ( "C-d C-b" . backward-delete-char-untabify ) ( "C-d C-e" . kill-line ) ( "C-d C-w" . delete-trailing-whitespace ) ( "C-d C-a" . delete-to-begin ) ) ) В стиле Vi, одну клавишу можно использовать для целого ряда действий. Например, удаление строки dd, до конца строки: de, до начала строки: da, вперёд: df, назад: db etc. См. также Hydras. Хороший стиль - повторные нажатия одной клавиши + модификатор: v - старт выделения слова, повторное v - expand-region (увеличить выделение), M-v - contract-region (уменьшить выделение), Shift-V - выделение строки, но и стандартный C-Space продолжает работать. Вариант простого конфига в этом духе Есть альтернативы god-mode, например Modalka.

Ответ 2



Попробовал различные варианты. IMHO стоит изучить клавиатурные комбинации установленные по умолчанию, т.к. и в справке и разной документации везде идут именно они. Как вариант можно назначать неиспользуюмые комбинации или клавиши под свои задачи. Ну, а насчет переназначения стандартных клавиатурных сокращений, то как писал в комментариях @avp, просто потом нужно переназначить и ту функцию, комбинацию которой переназначили другой функции. Например, хотим функцию undo включать по C-z. Смотрим чем занято C-z, нажимаем C-h k C-z: C-z runs the command suspend-frame, which is an interactive compiled Назначаем этой функции другую комбинацию.

Ответ 3



CUA-mode остальное как угодно.

понедельник, 9 декабря 2019 г.

Повышается ли производительность труда веб-программиста при использовании редактора Emacs или Vim?

#vim #emacs


Собственно, сабж. Стоит ли переходить на них в целях повышения скорости и удобства
работы с кодом?    


Ответы

Ответ 1



На мой взгляд, у этих редакторов пологая кривая вхождения. То есть вы будете долго их изучать и привыкать к ним, но когда (и если!) привыкнете, ваша производительность существенно возрастёт. Так что это долгосрочная инвестиция времени. Не забывайте, однако, что многие IDE обеспечивают тоже неплохие возможности для редактирования, особенно текста программ. Например, майкрософтовский Intellisense очень неплох для C# (для C++ субъективно хуже). Пробуйте, сравнивайте, выбирайте.

Ответ 2



Пользуюсь вимом длительное время. На механическое заучивание основных команд ушел примерно месяц, в этот период времени не сильно упала производительность - максимум на 10-15%. Как навык выработается, так скорость работы с текстом повысится примерно в два раза, за счёт исключения мыши и режимного подхода при редактировании кода. Единственное необходимое требование: вы должны уметь печатать вслепую. Настроенный лично под вас редактор (удобные горячие клавиши, сниппеты, поиск, переход по файлам и другое) повысит производительность более, чем любая IDE. Но нужно понимать, вим - редактор в большей степени. Если нужна отладка - то лучше в IDE (зависит от языка). Плюс скорость работы вима как приложения выше, чем у IDE.

понедельник, 15 июля 2019 г.

Emacs. Помогите исправить функцию move-text-up

Настраиваю под себя Emacs (v 24.5.1). Нужную мне функцию для перемещения блока кода (например line или region) вверх/вниз нашел здесь: https://www.emacswiki.org/emacs/move-text.el Функция корректно работает как со строкой(line), так и с блоком (region), но есть небольшая проблема при перемещении строки вверх, а именно, если становишься точкой на строку и вызываешь функцию move-text-up. Строка перемещается вверх один раз, точка остается на той же строке где и была. Соответственно повторное нажатие только обратно опускает ту строку, которую нужно было переместить на несколько строк выше.
Ниже привожу только конкретный фрагмент с функциями, полный текст файла можно найти по ссылке выше.
(defun move-text-internal (arg) (cond ((and mark-active transient-mark-mode) (if (> (point) (mark)) (exchange-point-and-mark)) (let ((column (current-column)) (text (delete-and-extract-region (point) (mark)))) (forward-line arg) (move-to-column column t) (set-mark (point)) (insert text) (exchange-point-and-mark) (setq deactivate-mark nil))) (t (let ((column (current-column))) (beginning-of-line) (when (or (> arg 0) (not (bobp))) (forward-line) (when (or (< arg 0) (not (eobp))) (transpose-lines arg)) (forward-line -1)) (move-to-column column t)))))
;;;###autoload (defun move-text-down (arg) "Move region (transient-mark-mode active) or current line arg lines down." (interactive "*p") (move-text-internal arg))
;;;###autoload (defun move-text-up (arg) "Move region (transient-mark-mode active) or current line arg lines up." (interactive "*p") (move-text-internal (- arg)))
;;;###autoload (defun move-text-default-bindings () "Bind `move-text-up' and `move-text-down' to M-up and M-down." (global-set-key [M-up] 'move-text-up) (global-set-key [M-down] 'move-text-down))
(provide 'move-text)
P.S. Да, искать ошибки в чужом коде не обязательно. Возможно есть лучшее решение.


Ответ

Рекомендую использовать модуль shift-text из melpa. Сам какое-то время использовал ваш сниппет, но у него есть и другие проблемы.
Из моего конфига
(use-package shift-text
:ensure t
:bind
(("C-M-n" . shift-text-down) ("C-M-p" . shift-text-up) ("C-M-f" . shift-text-right) ("C-M-b" . shift-text-left) ("C-M-j" . shift-text-down) ("C-M-k" . shift-text-up) ("C-M-l" . shift-text-right) ("C-M-h" . shift-text-left)))
(помимо стандарта, для навигации я использую vim-стайл HJKL)

суббота, 22 июня 2019 г.

CIDER ругается на nRepl после обновления пакетов в Emacs

; CIDER 0.11.0snapshot (package: 20160125.741) (Java 1.8.0_72, Clojure 1.7.0, nREPL 0.2.10) WARNING: CIDER requires nREPL 0.2.12 (or newer) to work properly WARNING: The following required nREPL ops are not supported: apropos classpath complete eldoc format-code format-edn info inspect-pop inspect-push inspect-refresh macroexpand ns-list ns-vars ns-path refresh resource stacktrace toggle-trace-var toggle-trace-ns undef Please, install (or update) cider-nrepl 0.11.0-SNAPSHOT and restart CIDER WARNING: CIDER's version (0.11.0-snapshot) does not match cider-nrepl's version (not installed). Things will break! user>

Как устранить конфликты в пакетах?
project.clj:
(defproject lesson-rpg1 "0.1.0-SNAPSHOT" :description "FIXME: write description" :url "http://example.com/FIXME" :license {:name "Eclipse Public License" :url "http://www.eclipse.org/legal/epl-v10.html"} :dependencies [[org.clojure/clojure "1.7.0"]] :main ^:skip-aot lesson-rpg1.core :target-path "target/%s" :profiles {:uberjar {:aot :all}})
lein deps :tree
D:\CODE\Clojure\lesson-rpg1>lein deps :tree [clojure-complete "0.2.3" :exclusions [[org.clojure/clojure]]] [org.clojure/clojure "1.7.0"] [org.clojure/tools.nrepl "0.2.10" :exclusions [[org.clojure/clojure]]] D:\CODE\Clojure\lesson-rpg1>
lein version:
D:\CODE\Clojure\lesson-rpg1>lein version Leiningen 2.5.2 on Java 1.8.0_72 Java HotSpot(TM) 64-Bit Server VM D:\CODE\Clojure\lesson-rpg1>


Ответ

Сложилась неприятная ситуация
...в самом Leiningen будет указана старая версия tools.nrepl до следующего релиза. Поэтому нужно указать версию явно в проекте или профиле (см. далее):
[org.clojure/tools.nrepl "0.2.12" :exclusions [[org.clojure/clojure]]]
...и так, чтобы при этом не приклеивалась зависимость от конкретной версии Clojure. И ещё, похоже, потребуется это:
[cider/cider-nrepl "0.11.0-SNAPSHOT"]

Что происходит
Если проект не указывает версию org.clojure/tools.nrepl явно, то используется та, что распространяется с Leiningen, в вашем случае это оказалась старая версия 0.2.10
Можно действовать любым из следующих способов:
указать её явно прямо в проекте в списке зависимостей добавить в профиль по умолчанию (~/.lein/profiles.clj)
это зависимость, поэтому подлежит записи под ключом :dependencies обновить Leiningen и получить новую встроенную версию tools.nrepl
на данный момент неактуально, ждём очередного релиза Leiningen.
Поскольку речь о совместимости проекта с вашей собственной средой разработки (а код самого проекта не зависит от этого), первый вариант плохо подходит, а второй скорее "заплатка".

среда, 24 октября 2018 г.

Emacs. Можно ли переназначить “без последствий” часть клавиатурных сокращений?

Можно ли в Emacs переназначить часть операций с текстом/файлами под более привычные(удобные) для себя комбинации клавиш, без конфликтов с другими командами? Или стоит изучить те которые по умолчанию? Пробовал Vim, но там ІМНО не стоит изменять хоткеи по умолчанию, да и там все довольно логично,да и много команд реализуются одной клавишей, так что не увидел особой необходимости в замене.


Ответ

Стандартные сочетания архаичны и загадочны, существует несколько подходов в основе. Хорошие примеры: Evil Mode (vim-аддиктам), Spacemacs, Ergo Emacs, Boon, fingers
Технической проблемы тут нет, это вопрос эргономики и управления сложностью конфигурации.
Вот из Vim на EMACS можно перейти только благодаря Evil-mode, ценой громоздкого конфига, однако с божьей помощью можно отказаться от Evil-mode, сохранив при том модальность. К вопросу, HJKL по-умолчанию в EMACS выполняют несущественные функции (С-h дублируется ), следовательно, такое можно и перемапить. FBNP-навигацию же, естественную для EMACS, и C-x-... M-x-..., C-c-..., повсеместно используемое - проще оставить нетронутым:
(use-package god-mode
:bind ( ( "M-i" . god-local-mode ) ( "" . god-local-mode ) ( "C-j" . next-line ) ( "C-k" . previous-line ) ( "C-h" . backward-char ) ( "C-l" . forward-char ) ( "C-d C-f" . delete-forward-char ) ( "C-d C-b" . backward-delete-char-untabify ) ( "C-d C-e" . kill-line ) ( "C-d C-w" . delete-trailing-whitespace ) ( "C-d C-a" . delete-to-begin ) ) )
В стиле Vi, одну клавишу можно использовать для целого ряда действий. Например, удаление строки dd, до конца строки: de, до начала строки: da, вперёд: df, назад: db etc. См. также Hydras.
Хороший стиль - повторные нажатия одной клавиши + модификатор: v - старт выделения слова, повторное v - expand-region (увеличить выделение), M-v - contract-region (уменьшить выделение), Shift-V - выделение строки, но и стандартный C-Space продолжает работать.
Вариант простого конфига в этом духе
Есть альтернативы god-mode, например Modalka

среда, 17 октября 2018 г.

Кроссплатформенная разработка на Scheme

Начал использовать lambdanative, основанный на Gambit Scheme, всё компилируется и работает, однако не могу понять, как в Gambit C полноценно отлаживать приложение в стиле итеративной lisp разработки, так как под него geiser в EMACS настроить не удалось.
Суть вопроса - как сделать, чтобы я видел запущенное приложение (так же, как оно выглядит, скомпилированным в эмуляторе Android SDK и iOS) и мог добавлять в него функциональность через REPL, в реальном времени?
Возможно, есть лучший путь - ведь тот-же geiser хорошо интегрирован с Chicken Scheme (более популярный чем Gambit) и guile (стандартный язык GNU) - может быть полезнее портировать функциональность lambdanative на один из них, чтобы получить комфортную среду... Но это и оверинжиниринг, ведь именно Gambit-C в данном случае уже хорошо работает с платформами, т.е. вопрос всё-таки в том, как выглядит правильный цикл работы с Gambit.


Ответ

Добавлю в виде ответа. Вопрос решён, в комментарии от 3 окт '15 есть ссылка на мой тред с авторами, в документации появился раздел Debugging и пример конфигурации: https://github.com/part-cw/lambdanative/wiki/Debugging