Я немного взломал snipMate, чтобы разрешить нужную функциональность.
Поместите этот код в autoload / snipMate.vim до конца функции s: RemoveSnippet () (после строки #14):
let linecount = len(getline("1", "$"))
for linenum in range(1, linecount)
let line = getline(linenum)
let line = substitute(line, '\v\%uc\(([^)]+)\)', '\U\1\E', 'g')
let line = substitute(line, '\v\%ucfirst\(([^)]+)\)', '\u\1', 'g')
call setline(linenum, line)
endfor
Теперь вы можете определять фрагменты следующим образом:
snippet dc
def create
@${1:product} = %ucfirst($1).new
%uc($1) = "This is Ruby %uc(constant) example."
end
Вывод:
def create
@product = Product.new
PRODUCT = "This is Ruby CONSTANT example."
end
Обратите внимание, что замена не выполняется в реальном временино после того, как вы "выйдете" из фрагмента.