Vim模板,获取文件名并使用它

时间:2012-09-02 00:01:54

标签: vim macvim vim-plugin

我正在为Java文件编写一个基本的Vim模板,当我创建一个扩展名为.java的新文件时,它会创建一个裸的框架类。

示例:

vim Banana.java

Vim创建一个包含以下代码的文件:

public class TODO {
    public static void main(String[] args) {
    // ...

我的目标是将我的默认类名TODO更改为没有扩展名的文件名,以便:

vim Coconut.java

创建:

public class Coconut {

而不是:

public class TODO {

我怎么能实现这一点呢?我搜索了网站,有些脚本在变量中提取名称并执行:在正确的地方替换,但我不知道如何找到正确的位置并在那里定位文件名。

我从我的.vimrc扩展读取了我的模板文件:

autocmd BufNewFile * silent! 0r $HOME/vimfiles/templates/%:e.vim_template

或:

autocmd BufNewFile * silent! 0r $HOME/.vim/templates/%:e.vim_template

谢谢!

2 个答案:

答案 0 :(得分:4)

我相信这可能会有所帮助吗? http://vim.wikia.com/wiki/Insert_current_filename

这样你就可以得到当前的文件名:

expand("%:t:r")

具体来说,您可能正在寻找:

%s/TODO/\=expand("%:t:r")/g

一个完整的例子:

function! NewFile()
    silent! 0r $HOME/vimfiles/templates/%:e.vim_template
    s/FILENAME/\=expand("%:t:r")
endfunction

autocmd BufNewFile * call NewFile()

你也可以试试tSkeleton这样的东西,我从来没有尝试过,但它似乎为你解决了这个问题。

答案 1 :(得分:1)

我会看一下snipmate(vim.orggithub)。它是样板代码的通用扩展,附带了许多用于Java的内置配方(您可以浏览here来感受它),并且非常适合这种类型的东西。

有了它,您可以输入关键字,点击标签,并将关键字扩展到您的样板代码中。因此,您可以输入stdclass->并获得您要求的内容。

该代码段可以嵌入vim表达式(如Filename());你可以选中扩展代码中的重要点,它也适用于较小的片段(如getter& setters,try / catch / finally,toString等)

它易于使用,易于定制,并且采用类似Java的样板语言,这是天赐之物。