Есть ли в Emacs расширение или режим, похожий на файлround.vim? - PullRequest
26 голосов
/ 30 апреля 2010

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

Ответы [ 7 ]

28 голосов
/ 30 апреля 2010

Может быть wrap-region - это то, что вам нужно.

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

8 голосов
/ 31 мая 2012

Я использую зло-окружение . Он эмулирует поведение vim, но, к сожалению, может не соответствовать требованиям большинства пользователей emacs, поскольку для него требуется режим evil vim. Тем не менее, это может или не может быть правильным для вас, так как вы ссылались на Surround.vim в первую очередь.

evil-Surround поддерживает большинство функций Surround.vim, включая изменение окружения.

4 голосов
/ 02 мая 2010

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

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

Обратите внимание, что если у вас нет выделенного региона, он просто вставит пару whatevers и поместит курсор между ними. Также удобно для удаления соответствующих 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 ">"))))
1 голос
/ 28 июля 2010

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

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

1 голос
/ 01 мая 2010

Не знаю ни одного способа сделать это в 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 "\"")))
0 голосов
/ 14 сентября 2014

возможно зло-окружение - это то, что вы ищете.

спасибо.

0 голосов
/ 30 апреля 2010

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

############################
#                           #
# I AM REGION, WE ARE  MANY #
#                           #
############################
...