Проблема написания фрагмента, содержащего код Emacs Lisp - PullRequest
5 голосов
/ 26 декабря 2010

Я пытался использовать классную функцию YASnippet: писать фрагменты, содержащие встроенный код Emacs Lisp.Существует фрагмент для первого режима, который окружает введенный текст символом "=", равным тексту, например,

====

Text

====

Основываясь на этом фрагменте, я решил немного изменить его (с помощью Elisp), чтобы он закомментировал эти три строки в зависимости от основного режима, в котором вы находитесь (я думал, что такой фрагмент будетполезно организовать исходный код).Итак, я написал это:

${1:`(insert comment-start)`} ${2:$(make-string (string-width text) ?\-)}
$1 ${2:Text}
$1 ${2:$(make-string (string-width text) ?\-)}

$0

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

Я думаю, что источник проблемы может быть связан с тем, что следует за строкой ${1: в первой строке.Если я добавлю символ, у меня не возникнет проблем (т. Е. Все три строки будут правильно выровнены в конце расширения фрагмента).Если я добавлю один пробел после этой строки, проблема смещения все еще будет продолжаться.

Итак, мой вопрос: знаете ли вы какой-либо способ переписать этот фрагмент, чтобы не возникало такого смещения?Знаете ли вы, что является источником этого поведения?

Ура,

1 Ответ

2 голосов
/ 28 декабря 2010

С Написание фрагментов :

Яс / отступа строки

Переменная yas / indent-line контролирует отступ. По умолчанию он привязан к 'auto, что приводит к отступу вашего фрагмента в соответствии с режимом буфера, в который он был вставлен.

Другая переменная yas / также-авто-отступ-первая строка, когда не ноль делает именно это: -).

Чтобы использовать жестко заданный отступ в шаблоне фрагмента, установите для этой переменной значение fixed.

Чтобы управлять отступами для отдельных фрагментов, см. Также директиву # expand-env: в разделе «Создание фрагментов».

Для обратной совместимости с более ранними версиями YASnippet вы также можете поместить $> в ваш фрагмент, там будет выполняться (отступ в соответствии с режимом) для отступа строки. Это действует только тогда, когда yas / indent-line имеет значение, отличное от 'auto.

for (${int i = 0}; ${i < 10}; ${++i})
{$>
$0$>
}$>
...