Загадка на эти выходные: что делают эти две команды?
1.
2.
Вместо
1.
find ./ -name "*.<ext>" -exec grep -e "[A-Za-z][А-Яа-яЁё]" {} \;
2.
find ./ -name "*.<ext>" -exec grep -e "[А-Яа-яЁё][A-Za-z]" {} \;
Вместо
<ext>
подставьте расширение файлов, в которых хранится код ваших проектов: md
для Markdown, rst
для ReStructured Text, adoc
для AsciiDoc, tex
для LaTeX и так далее.👍1
Теперь ответ на приведённую выше задачу.
Утилита
Найденные файлы передаются в утилиту
При желании можно объединить эти две команды в одну, подправив регулярное выражение. Однако, при этом пострадает простота понимания. Регулярные выражения сложны сами по себе, поэтому не усложняйте их без веской причины.
Утилита
find
используется для поиска файлов. В данном случае выполняется поиск по части имени.Найденные файлы передаются в утилиту
grep
, которая выполняет поиск нужной строки. Только вместо строки у нас регулярное выражение, которое в первом случае означает "Найди места, где после символов латиницы идут символы кириллицы", а во втором случае — наоборот, "Найди места, где сначала идёт кириллица, а потом латиница".При желании можно объединить эти две команды в одну, подправив регулярное выражение. Однако, при этом пострадает простота понимания. Регулярные выражения сложны сами по себе, поэтому не усложняйте их без веской причины.
👍1
Команда
Эта запись означает следующее: искать только файлы (не каталоги и не символические ссылки), начиная с текущего каталога, а найденное передавать в
Что там разбирает
#find #grep #поиск
find-grep
в Emacs запускает утилиту find
, её вывод перенаправляет в grep
, а его вывод отображает в буфере. По умолчанию команда find
запускается с такими аргументами:find . -type f -exec grep
Эта запись означает следующее: искать только файлы (не каталоги и не символические ссылки), начиная с текущего каталога, а найденное передавать в
grep
.Что там разбирает
grep
пока опустим. Лучше подкрутим аргументы find
. Вряд ли вы хотите, чтобы утилита искала совпадения во всех файлах проекта, поэтому давайте добавим аргумент -name
, например:find . -type f -name "*.rst" -exec grep
#find #grep #поиск
👍4
На выходных поработал с интерпретатором Python в интерактивном режиме. VIM опять никому не нужен, а вот сочетания Emacs вполне себе работают: [C-a], [C-e], [M-f], [M-b], [C-f], [C-b] и ещё некоторые. Возможно, даже стоит написать статью на Хабр, где рассказать, что сочетания из Emacs можно использовать в Python и GNOME Terminal, а сочетания из VIM только в самом VIM.
👍1
По мотивам поста про бесячий автокомплит просто выложу свой код настройки
Теперь описание.
1. Если пакет не установлен,
2. В строке состояния ничего не выводится. Для этого я использую Delight. Код установки и инициализации в моём
3. Пакет
4. Настройки — самое интересное. То, о чём написано в ОП-посте, решается через правку
5. Всё остальное уже вкусовщина, настраивайте по своему усмотрению.
company-mode
:;; 📦 COMPANY-MODE
;; https://company-mode.github.io/
;; Автодополнение
(use-package company
:ensure t
:init
(unless (package-installed-p 'company)
(package-vc-install '(company
:url "https://github.com/company-mode/company-mode.git"
:branch "1.0.2")))
:delight ""
:demand t
:custom
(company-idle-delay 0.5 "Задержка вывода подсказки — полсекунды")
(company-minimum-prefix-length 2 "Минимум 2 знака, чтобы company начала работать")
(company-show-quick-access t "Показывать номера возле потенциальных кандидатов")
(company-tooltip-align-annotations t "Выровнять текст подсказки по правому краю")
(company-tooltip-limit 15 "Ограничение на число подсказок")
:hook ((adoc-mode
css-mode
dockerfile-mode
emacs-lisp-mode
html-mode
latex-mode
lisp-data-mode
minibufer-mode
nxml-mode
org-mode
python-mode
rst-mode
ruby-mode
web-mode
) . company-mode)
:bind
(:map company-active-map
("TAB" . company-complete-common-or-cycle)
("M-/" . company-complete)
("M-." . company-show-location)))
Теперь описание.
1. Если пакет не установлен,
package-vc-install
сделает это, при чём поставит фиксированную версию 1.0.2, а не нестабильную из MELPA.2. В строке состояния ничего не выводится. Для этого я использую Delight. Код установки и инициализации в моём
init.el
размещается выше.3. Пакет
company
загружается не сразу, а в фоне. Прямо после запуска он мне не нужен, поэтому :demand t
.4. Настройки — самое интересное. То, о чём написано в ОП-посте, решается через правку
company-idle-delay
и, при необходимости, company-minimum-prefix-length
.5. Всё остальное уже вкусовщина, настраивайте по своему усмотрению.
Telegram
Стой под стрелой
Бесит, когда автокомплит включен во время набора. Сидишь, никого не трогаешь, пишешь себе «pri», а оно радостно: «privet»? «pribor»? «prihod»? И твой же код рядом заслоняет. А ты, может, на него смотрел, может, в соседней строчке, которую заслонили, ответ…
👍1🔥1
Главная проблема 9 каналов из 10, касающихся Emacs, заключается в том, что там обсуждают не Emacs.
По возможности избегайте чтения таких каналов: может сложиться впечатление, что Emacs состоит из одних только проблем.
org-mode
, DooM Emacs, Emacs Prelude, Evil, ошибки при работе фрагментов кода, взятых со StackOverflow, и хорошо если не из вопроса, а из ответов...По возможности избегайте чтения таких каналов: может сложиться впечатление, что Emacs состоит из одних только проблем.
👌7🙈3
Если вы до сих пор не используете Counsel, то самое время попробовать:
В Counsel встроено множество команд, заменяющих собой стандартные команды. Главное удобство заключается в поиске. Например,
Если вы ранее настроили Helm, не забудьте отключить часть его функций, чтобы не было конфликтов.
#counsel
;; 📦 COUNSEL
;; https://elpa.gnu.org/packages/counsel.html
;; Автодополнение на основе Ivy
(use-package counsel
:ensure t
:bind
(:map global-map
("M-x" . counsel-M-x)
("C-x C-f" . counsel-find-file)
("M-y" . counsel-yank-pop)
("C-h f" . counsel-describe-function)
("C-h v" . counsel-describe-variable)
("C-h l" . counsel-find-library)
("C-c c" . counsel-compile)
("C-c g" . counsel-git)
("C-x 8 RET" . counsel-unicode-char)))
В Counsel встроено множество команд, заменяющих собой стандартные команды. Главное удобство заключается в поиске. Например,
counsel-M-x
фильтрует записи по регулярному выражению прямо во время ввода команды!Если вы ранее настроили Helm, не забудьте отключить часть его функций, чтобы не было конфликтов.
#counsel
This media is not supported in your browser
VIEW IN TELEGRAM
Демонстрация работы
counsel-M-x
Пакет
Техписам тоже будет полезен при настройке тем AsciiDoc или Sphinx.
https://github.com/DevelopmentCool2449/colorful-mode
colorful-mode.el
обновился до стабильной версии 1.1.0
. Он используется для отображения цветов в буферах. Если вы часто работаете с CSS или HTML-кодом, то вам этот пакет будет полезен тем, что фон строки с кодом цвета типа #FF2200
будет иметь именно этот оттенок красного! Также пакет распознаёт коды типа cyan
, red
, black
и тому подобное.Техписам тоже будет полезен при настройке тем AsciiDoc или Sphinx.
;; 📦 COLORFUL-MODE
;; https://github.com/DevelopmentCool2449/colorful-mode
;; Отображение цветов прямо в буфере. Наследник `raibow-mode.el'.
(use-package colorful-mode
:ensure t
:hook ((css-mode
emacs-lisp-mode
web-mode) . colorful-mode))
https://github.com/DevelopmentCool2449/colorful-mode
GitHub
GitHub - DevelopmentCool2449/colorful-mode: 🎨Preview any color in your buffer
🎨Preview any color in your buffer. Contribute to DevelopmentCool2449/colorful-mode development by creating an account on GitHub.
А вы знали, что для ReStructured Text и Sphinx существует LSP-сервер? А он есть и называется Esbonio. Сегодня мне удалось его настроить вопреки инструкциям с сайта разработчиков, поэтому в ближайшем обновлении книги на Boosty будет целая глава про это. Всем остальным придётся ждать 3 месяца 😊
hl-line.el
— это встроенный пакет. Всё, что он делает — подсвечивает активную строку. Конечно, у нас есть Pulsar и Beacon, но hl-line-mode
не конфликтует с ними, а образует симбиоз. Единственное, что могу посоветовать — выбирайте тему оформления так, чтобы в ней подсвеченная строка нормально читалась. Например, в doom-monokai-pro
приходилось напрягать глаза, зато в ef-autumn
всё в порядке.(require 'hl-line)
(global-hl-line-mode 1)
Впрочем, с
use-package
тоже можно:(use-package hl-line
:config (global-hl-line-mode 1))
Telegram
GNU EMACS для технических писателей
Пакет pulsar.el обновился до версии 1.2.0. Что он делает? Он заставляет "вспыхивать" строки, на которых находится курсор. Допустим, вы переключились на другой буфер. Где сейчас находится курсор? Приходится искать или нажимать [C-l]. pulsar-mode подсветит…
👍2
На Boosty опубликовано техническое обновление книги. В AsciiDoc пустые строки являются частью синтаксиса, и иногда из-за этого одна глава "прилипает" к другой. Вставил пустые строки в начало, кажется, всех файлов, кроме
src/index.adoc
. Сейчас структура оглавления должна быть корректной. Обо всех найденных ошибках можете писать мне на почту dunmaksim@yandex.ru или в Telegram-канал с обсуждением книги.boosty.to
v25.02.20 - Максим Дунаевский
Техническое обновление, связанное с исправлением вёрстки.
👍3
В книгу вчера были добавлены описания того, как работать с окнами Emacs. Частично продублирую контент сюда.
[C-x 0] — закрыть активное окно.
[C-x 1] — сделать активное окно единственным. Все прочие окна будут закрыты.
[C-x 2] — разделить активное окно горизонтальной чертой.
[C-x 3] — разделить активное окно вертикальной чертой.
[C-x 4 1] и [C-x 4 4] — это префиксы. Указанная после них команда будет принудительно выполнена в том же самом окне или в отдельном соответственно. Кстати, существует несколько сокращений по умолчанию. Например, не нужно отдельно вызывать Dired, достаточно нажать [C-x 4 d], и указанный каталог будет открыт в новом окне.
[C-x 0] — закрыть активное окно.
[C-x 1] — сделать активное окно единственным. Все прочие окна будут закрыты.
[C-x 2] — разделить активное окно горизонтальной чертой.
[C-x 3] — разделить активное окно вертикальной чертой.
[C-x 4 1] и [C-x 4 4] — это префиксы. Указанная после них команда будет принудительно выполнена в том же самом окне или в отдельном соответственно. Кстати, существует несколько сокращений по умолчанию. Например, не нужно отдельно вызывать Dired, достаточно нажать [C-x 4 d], и указанный каталог будет открыт в новом окне.
👍2🔥1
Какое действие выполняет последовательность [C-x 4 f]?
Anonymous Quiz
8%
Запуск find-grep
63%
Запуск find-file
29%
Создаёт окно и перемещает в него курсор
Пожалуй, постановка последнего опроса не вполне корректна, ведь при выполнении
find-file-other-window
формально Emacs создаёт новое окно и перемещает в него курсор. Постараюсь в следующий раз формулировать вопросы и ответы без спешки.Надоело, что в русской раскладке не работает команда
dired-up-directory
, привязанная к [^]. Решил проблему радикально:(keymap-set dired-mode-map ":" 'dired-up-directory)
👍2🤯1