(ре) число пронумеровало списки в emacs (муза)

предположите, что у меня есть текстовый список в emacs как это:

a
b
c
...
d

Существует ли способ присвоить номера тем объектам в Emacs путем выбора региона? Конечные результаты должны быть похожими:

1. a
2. b
3. c
j. ...
n. d

Спасибо.

7
задан justinhj 10 April 2010 в 00:37
поделиться

6 ответов

(defun number-region (start end)
  (interactive "r")
  (let* ((count 1)
     (indent-region-function (lambda (start end)
                   (save-excursion
                     (setq end (copy-marker end))
                     (goto-char start)
                     (while (< (point) end)
                       (or (and (bolp) (eolp))
                       (insert (format "%d. " count))
                       (setq count (1+ count)))
                       (forward-line 1))
                     (move-marker end nil)))))
    (indent-region start end)))
3
ответ дан 6 December 2019 в 07:05
поделиться

Я делаю это, что может быть не оптимальным, - использовать поиск и замену по регулярным выражениям. Это, конечно, требует, чтобы вы могли определить регулярное выражение, которое соответствовало бы началу строк, в которых вам нужны числа. Взяв ваш пример, я бы использовал следующее регулярное выражение поиска:

\([a-z]\)

обратите внимание на скобки захвата, нам скоро понадобится эта первая буква. И регулярное выражение replace, подобное этому:

\#. \1

где:

\ # - это специальная форма, которая заменяется Emacs правильным числом (хотя см. Предупреждение ниже):

. записывает остановку; и

\ 1 записывает пробел и захваченную группу.

ПРЕДУПРЕЖДЕНИЕ: Emacs пронумерует ваши элементы 0, 1, 2, ... . Пока кто-нибудь не напишет нам, как начать с 1, я всегда вставляю фиктивный 0-й элемент перед редактированием, а затем удаляю его.

10
ответ дан 6 December 2019 в 07:05
поделиться

Вы можете использовать счетчик макросов клавиатуры Emacs .

  • Поместите курсор на одну строку НАД вашим списком.

  • Запустить макрос: F3

  • Вставить значение счетчика: C-x C-k C-i . Появится 0

  • Вставьте точку и пробел: .

  • Переместите курсор на следующую строку

  • Остановите макрос: F4

  • Выберите свой список

  • Mx apply-macro-to-region-lines

  • Вы можете удалить 0, который вы добавили вверху и наслаждайтесь :)

ПРИМЕЧАНИЕ: Это создаст нумерованный список. Он не будет использовать буквы.

6
ответ дан 6 December 2019 в 07:05
поделиться

Вот некоторый код elisp для этого; его можно легко доработать, если вам нравится возиться.

Это пронумерует текущий регион (если он еще не пронумерован), а также последняя строка привязывается к клавишам M-n. При необходимости можно использовать функциональную клавишу "[F6]".

Изменено, чтобы принимать строку формата для использования. По умолчанию это 1. но вы можете сделать что-то вроде %d), чтобы получить скобку вместо . и так далее.

  (defun number-region(fmt)
  (interactive "sFormat : ")
  (if (or (null fmt) (= 0 (length fmt)))
      (setf fmt "%d. "))
  (save-excursion
    (save-restriction
      (narrow-to-region (point) (mark))
      (goto-char (point-min))
      (let ((num 1))
    (while (> (point-max) (point))
  (if (null (number-at-point))
      (insert (format fmt num)))
      (incf num)
      (forward-line))))))


(global-set-key "\M-n" 'number-region)
1
ответ дан 6 December 2019 в 07:05
поделиться

Не прямой ответ на ваш вопрос, но если вы обнаружите, что часто манипулируете нумерованными списками, вы можете изучить org-mode . В частности, раздел в простых списках .

0
ответ дан 6 December 2019 в 07:05
поделиться

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

Вы можете использовать cua-set-rectangle-mark (по умолчанию привязан к C-Return), чтобы начать прямоугольник, а затем использовать cua-sequence-rectangle , чтобы вставить увеличивающийся ценности. Это также дает вам контроль над форматом и начальным значением, что обеспечивает большую гибкость.

Кроме того, CUA в первую очередь разработан для того, чтобы заставить Emacs работать как стандартные текстовые редакторы (с C-c для копирования, C-v для вставки и т. Д.), Но он также включает в себя некоторые несвязанные тонкости, такие как редактирование прямоугольника. Не спрашивайте почему :). Если вы хотите использовать редактирование прямоугольника без включения привязок клавиш CUA (что я и делаю), установите для cua-enable-cua-keys значение nil , что можно сделать с помощью настройки .

5
ответ дан 6 December 2019 в 07:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: