Emacs typeover скелет-пара-вставка-может - PullRequest
7 голосов
/ 11 мая 2009

В Eclipse, редактируя код Java, если я набираю open-paren, я получаю пару parens. Если я потом «наберу» второго парена, он не вставит дополнительного парена. Как мне получить это в Emacs?

Редактор Eclipse достаточно умен, чтобы знать, когда я печатаю близкую пареню, что я только заканчиваю то, что начал. Курсор перемещается мимо закрытой пары. Если я затем наберу точку с запятой, то же самое: она просто перезаписывает точку с запятой, и я не получаю две из них.

В emacs, в java-режиме или csharp-mode, если я привязываю open-paren к skeleton-pair-insert-возможно, я получаю пару open-close paren, что хорошо. Но тогда, если я "наберу" близкого парня, я получу двух близких паренов.

Есть ли способ научить emacs не вставлять закрытое paren после сразу предшествующей скелет-пара-вставка-возможно? И если это возможно, как насчет некоторого подобного интеллекта, чтобы избежать удвоения точки с запятой?

Я спрашиваю о паренсе, но то же самое относится и к двойным кавычкам, фигурным скобкам, квадратным скобкам и т. Д. Все, что вставлено с помощью skeleton-pair-insert-возможно.

Ответы [ 4 ]

4 голосов
/ 11 мая 2009

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

Обновление:

С тех пор, как я опубликовал этот ответ, я обнаружил Autopair , которая является довольно совершенной системой для этого варианта использования. Я использовал это много и люблю это.

2 голосов
/ 12 мая 2009

Подводя итог тому, что я сделал, я посмотрел этот пост и взял из него то, что хотел. То, что я закончил, было проще, потому что у меня не было дополнительных требований, которые он имел.

Я использовал эти два новых определения:

(defvar cheeso-skeleton-pair-alist
  '((?\) . ?\()
    (?\] . ?\[)
    (?" . ?")))


(defun cheeso-skeleton-pair-end (arg)
  "Skip the char if it is an ending, otherwise insert it."
  (interactive "*p")
  (let ((char last-command-char))
    (if (and (assq char cheeso-skeleton-pair-alist)
             (eq char (following-char)))
        (forward-char)
      (self-insert-command (prefix-numeric-value arg)))))

И затем в своем java-mode-hook я связал закрывающую скобку и закрывающую скобку следующим образом:

(local-set-key (kbd ")") 'cheeso-skeleton-pair-end)
(local-set-key (kbd "]") 'cheeso-skeleton-pair-end)
1 голос
/ 11 мая 2009

Я использую paredit-mode, который делает это и многое другое.

0 голосов
/ 11 мая 2009

ParEdit звучит так, как если бы он отвечал требованиям, указанным в скобках, с оговоркой, что он был разработан для Common Lisp и Scheme. Стив Йегге упоминает JDEE для emacs Java-разработки , но я не могу сказать об этом из личного опыта, и я не смог найти никакой документации по этому вопросу, говорящей о структурном редактировании.

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