在Vim函数中获取没有文件扩展名的文件名。

时间:2010-04-09 07:52:53

标签: vim

我想在Vim中获取没有文件扩展名的文件名。

我在.vimrc文件中编写了以下函数以进行编译并运行Java程序。

:function! JAVA_RUN()
:!javac %^M
:endfunction

map <F3> :execute JAVA_RUN()<CR> :source $HOME/.vimrc<CR>

在功能方面,我怎样才能获得没有扩展名的文件名。

4 个答案:

答案 0 :(得分:85)

:help expand()应该给你答案,请参阅expand()

您应该使用%r修饰符,而%:r代替%来获取没有扩展名的文件名。

如果要编写用于构建和执行文件的函数,还应该查看shellescape的文档,以防止文件名或路径中出现空格问题。

答案 1 :(得分:4)

我真的只是读了一个类似的问题(因为其他人似乎试图配置vim用F键自动构建它们),并写了an answer关于如何利用权力vim的:make命令,甚至不需要编写Makefile。在你的情况下,它与问题没有直接关系,但我想我会在你感兴趣的时候提及它。

此外,似乎有人在Vim Tips Wiki上写了一些关于如何设置vim :make命令以专门处理使用ant构建的Java项目的内容。我自己一段时间没有使用Java,但在你的情况下,它可能是一个开始的好地方。

答案 2 :(得分:1)

如果您要扩展文件名(%等除外),请查看fnamemodify()

fnamemodify({fname}, {mods})                *fnamemodify()*
        Modify file name {fname} according to {mods}.  {mods} is a
        string of characters like it is used for file names on the
        command line.  See |filename-modifiers|.

fnamemodify("main.java", ":r")返回main

答案 3 :(得分:0)

我来这里寻找类似问题的答案。我希望能够从正在编辑的java文件中提取当前的类名。我在vim中用一个缩写词找到了一个非常简洁的方法:

ab xclass <C-R>=expand('%:t:r')<CR>

将此行放在.vimrc(或类似代码)中以使其生效。一按下空格,缩写就会自动触发,因此我通常会在前面添加&#39; x&#39;避免意外扩张。

这里的诀窍是在:t的参数中:rexpand()的组合。 %是&#34;当前文件名&#34;,:t仅选择 t 路径的所有内容(&#34;仅限最后一个路径组件&#34; )和:r只选择 r oot(&#34;删除了一个扩展名&#34;)。 (引用的部分来自官方 expand()文档。)

因此,当您在文件/a/b/ClassIAmAboutToCreate.java中创建新类时,请键入:

public class xclass {

在&#34; xclass&#34;之后按空格的那一刻,缩写将扩展为public class ClassIAmAboutToCreate,这正是您所需要的。

另请注意,可以通过按 Ctrl + ] 来触发缩写,这样可以避免在类名后插入空格。