Замените персонажа перед расширением яснипета - PullRequest
3 голосов
/ 11 ноября 2011

Можно ли заменить символ до раскрытия яснипета?

Скажите, что у меня есть следующий фрагмент:

# -*- mode: snippet -*-
# name: foo
# key: foo
# --
~bar$0

Я пишу foo и нажимаю Tab , чтобы развернуть его, и я получаю ~bar или явно проиллюстрировано, где первая строка перед расширением, а вторая после расширения:

foo[Tab]
~bar

Теперь представьте, что я хочу, чтобы фрагмент удалял любые возможные пробелы непосредственно перед курсором (то есть 1- n непосредственно перед пробелами), прежде чем фрагмент будет развернут.

Скажите, что у меня есть следующий текст

word word

и что я ставлю курсор как таковой

word [cursor]word

и введите фрагмент кода

word foo[cursor]word

теперь я расширяю фрагмент, нажимая Tab , и я хочу, чтобы произошло следующее

word~bar[cursor]word

Обратите внимание, что пробел перед фрагментом удаляется, так что фрагмент вставляется непосредственно после первого слова. Как я могу это сделать? Это не происходит с определенным фрагментом выше. Что происходит, это

word ~bar[cursor]word

Ответы [ 2 ]

2 голосов
/ 11 ноября 2011

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

`(if (string= " " (string (preceding-char))) (backward-delete-char))`
1 голос
/ 12 ноября 2011

Работает с последней ясниппетой из здесь :

# -*- mode: snippet -*-
# name: foo
# key: foo
# --
~bar${0:$$(save-excursion (goto-char (overlay-start (yas/snippet-control-overlay (first (yas/snippets-at-point)))))
                          (delete-char (- (skip-chars-backward " "))))}
...