Существует ли расширение или режим в Emacs, подобном surround.vim?

Surround.vim является изящным расширением энергии, которое позволяет Вам окружать блоки текста с, скобки, фигурные скобки, и в значительной степени любой произвольный "окружает" символ. Это поддерживает абзац, и слово окружают, но я часто использую его в визуальном режиме. Я играю вокруг с Emacs и задаюсь вопросом, существует ли что-то подобное; что-то, что позволит мне выделить регион и затем иметь отмеченный регион (или прямоугольник) включенный с фигурными скобками, скобками или тегами.

26
задан Chow 30 April 2010 в 17:36
поделиться

5 ответов

Возможно, wrap-region - это то, что вам нужно.

smartparens - еще один отличный вариант, если нужно обернуть что-то разделителями, тегами и т. Д.

29
ответ дан 28 November 2019 в 07:27
поделиться

То есть вы хотите выделить регион или что-то подобное, а затем сделать вокруг него рамку, как это делают различные режимы для комментариев? Я считаю, что в emacs-wiki (http://www.emacswiki.org/) есть несколько инструментов для создания строк ascii-линии (а также инструмент figlet), которые могут это сделать. Поиск по box, quite, line art ...

############################
#                           #
# I AM REGION, WE ARE  MANY #
#                           #
############################
-3
ответ дан 28 November 2019 в 07:27
поделиться

Не знаю ни одного способа сделать это в Emacs, даже с модулем.

Мой Elisp немного заржавел, купите вот простую функцию, которая будет заключать текущую область (выделенный текст) или слово в кавычки ("):

(defun insert-quotes ()
  "Inserts quotes (\") around the current region or work."
  (interactive)
  (let (start end bounds)
    (if (and transient-mark-mode mark-active)
        (setq start (region-beginning) 
              end (region-end))
      (progn
        (setq bounds (bounds-of-thing-at-point 'symbol))
        (setq start (car bounds) 
              end (cdr bounds))))
    (goto-char start)
    (insert "\"")
    (goto-char (+ end 1))
    (insert "\"")))
1
ответ дан 28 November 2019 в 07:27
поделиться

Я не думаю, что есть что-то встроенное для тегов, но для паренсов вы можете сделать M-(. Для скобок/браслетов/кавычек вы можете сделать:

(global-set-key (kbd "M-[") 'insert-pair)
(global-set-key (kbd "M-{") 'insert-pair)
(global-set-key (kbd "M-\"") 'insert-pair)

Обратите внимание, что если у вас не выделена область, он просто вставит пару символов и поместит курсор между ними. Также удобно для удаления совпадающих whatevers

(global-set-key (kbd "M-)") 'delete-pair)

Если вы хотите вставить пары тегов, это простой elisp:

(defun my-insert-tags (tag)
  (interactive "sTag: ")
  (if (region-active-p)
      (let ((beg (region-beginning)))
        (save-excursion
          (goto-char (region-end))
          (insert "</" tag ">")
          (goto-char beg)
          (insert "<" tag ">")))
    (insert "<" tag ">")
    (save-excursion
      (insert "</" tag ">"))))
4
ответ дан 28 November 2019 в 07:27
поделиться

Да, есть клон Surround.vim, по состоянию на 1 неделю назад: http://github.com/timcharper/vimpulse-surround.el

Требуется vimpulse, который требует vim. Он реализует большую часть функциональности Surround.vim.

1
ответ дан 28 November 2019 в 07:27
поделиться