4

我正在为 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 {

请问我怎样才能做到这一点?我已经搜索了该站点,并且有一些脚本可以在变量中提取名称并在正确的位置执行 :substitute,但我不知道如何找到正确的位置并将文件名放置在那里。

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

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

或者:

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

谢谢!

4

2 回答 2

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 之类的东西,我自己从未尝试过,但它似乎为您解决了这个问题。

于 2012-09-02T00:18:42.843 回答
1

我会看看 snipmate ( vim.org , github )。它是样板代码的通用扩展,带有许多 Java 的内置配方(您可以在此处浏览以了解它),并且非常适合此类内容。

有了它,您可以输入关键字,点击标签,然后将关键字扩展到您的样板代码中。所以你可以输入stdclass->并得到你想要的。

The snippet can have vim expressions embedded (like Filename()); you can tab through important points in the expanded code, and it's useful for smaller snippets too (like getters & setters, try/catch/finally, toString, etc.)

It's easy to use, easy to customize, and in a boilerplate-heavy language like Java, it's a godsend.

于 2012-09-02T17:05:42.760 回答