«Выполнить и обновить» # => «Маркеры» для VIM - PullRequest
7 голосов
/ 21 января 2011

Есть ли возможность в VIM повторить функцию TextMate "Выполнить и обновить" # => 'Маркеры' для кода рубина.

Я бы хотел что-то вроде:

x = 2
class A
  def a
    42
  end
end

x # => 
A.new.a # =>

Введите какую-нибудь команду ... и получите

x = 2
class A
  def a
    42
  end
end

x # => 2
A.new.a # => 42

Вот описание этой функции из Блога Киарана Уолша :

Еще один инструмент, который определенно стоитЗнание - это команда «Выполнить и обновить» # => «Маркеры» (по умолчанию ⌃⇧⌘E).Чтобы использовать его, добавьте несколько маркеров комментариев (есть фрагмент # на ⇥, который вставит их для вас) в конец строк, в которых вы хотите увидеть результаты, и затем запустите команду.TextMate запустит ваш код и сообщит результат отмеченной строки в комментариях.Эта функция отлично подходит для кода, размещенного в Интернете, поскольку она показывает источник и результаты вместе.

Ответы [ 2 ]

3 голосов
/ 21 января 2011

Использовать xmpfilter из rcodetools .

1 голос
/ 21 января 2011

Похоже, что не должно быть слишком сложно написать это как функцию Vim.Попробуйте это:

function! ExecuteAndUpdate()
    ruby << EOF
        marker = '# =>'
        buf = VIM::Buffer.current
        lines = File.readlines(buf.name)

        bnd = binding
        eval(lines.join("\n"), bnd)

        lines.each_with_index do |line, i|
            if line.match(/#{marker}/)
                result = marker + ' ' + eval(line, bnd).inspect
                buf[i+1] = line.sub(/#{marker}.*/, result).chomp
            end
        end
EOF
endfunction

Тогда :call ExecuteAndUpdate().

Одно ограничение состоит в том, что он оценивает каждую строку с маркером дважды.Поэтому линии с маркерами не должны иметь побочных эффектов.

...