Vim函数用文件名中的模块计算ruby类定义?

时间:2014-06-11 13:41:52

标签: automation vim

我想开始使用vimscript来自动化我工作流程中一些更复杂的部分。我正在寻找一个具体的高级示例来帮助我入门。你如何对大师实施以下内容?

我在位于lib/foo/bar/buz.rb的文件的空缓冲区中。我想使用我的文件上下文+一个绑定将以下内容插入缓冲区:

module Foo
module Bar

  class Buz
  end

end
end

vim功能是什么样的?

加分: Vim function to update class definition to reflect current location

我认为这个例子将把我的vim脚本提升到一个新的水平。谢谢!

1 个答案:

答案 0 :(得分:0)

这最终是我提出来的。

" Generates a ruby class definition based on the current file's path
function! GenerateRubyClassDefinition()
  " parse file path
  let l:path = expand("%:.:r")
  let l:path = substitute(l:path, "lib/", "", "")
  let l:parts = split(l:path, "/")

  " extract parts
  let l:class_name = l:parts[-1]
  let l:module_names = l:parts[0:-2]

  " generate
  let l:output = ""

  " generate - module headers
  for m in l:module_names
    let l:output .= "module " . g:Abolish.mixedcase(m) . "\n"
  endfor

  " generate - class
  let l:output .= "\n"
  let l:output .= "  class " . g:Abolish.mixedcase(class_name) . "\n"
  let l:output .= "  end\n"
  let l:output .= "\n"

  " generate - module footers
  for m in l:module_names
    let l:output .= "end\n"
  endfor

  echo l:output
endfunction

上面的代码片段假设你安装了tpope的vim-abolish插件。这有助于将snakecase文件路径转换为mixcase对象名称。

获取上述内容并从打开的文件缓冲区调用:GenerateRubyClassDefinition()将回显目标输出。

相关问题