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

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

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

 :function! JAVA_RUN() :!javac %^M :endfunction map <F3> :execute JAVA_RUN()<CR> :source $HOME/.vimrc<CR> 

在function方面,我怎样才能得到扩展名的文件名。

:help expand()应该给你答案,看expand() 。

你应该使用r修饰符作为%,使用%:r而不是%来获得没有扩展名的文件名。

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

我从字面上只是读了一个类似的问题(因为别人似乎在试图configurationvim来为它们自动创buildF键),并且写了一个关于如何利用vim的强大function的答案 :make command without甚至需要编写一个Makefile。 在你的情况下,这个问题与问题没什么直接关系,但是如果你有兴趣,我想我会提到它。

此外,有人似乎写了一些关于如何设置vim的Vim Tips Wiki :make命令专门用于使用ant构build的Java项目。 我自己也没有和Java一起工作过,但是在你的情况下,这可能是一个开始的好地方。

如果你想exand一个文件名(除了%等)看看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

我来到这里寻找类似问题的答案。 我想能够从正在编辑的Java文件中提取当前的类名称。 我发现一个非常简洁的方法来做到这一点在vim中的缩写:

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

放置在你的.vimrc(或类似的)这一行工作。 一旦你按下空格,一个缩写将自动触发,所以我通常用“x”作为前缀以避免它们的意外扩展。

这里的诀窍是expand()参数中的:t:r的组合。 %是“当前文件名”, :t仅selectpath的全部(仅“最后path组件”),并且:r仅selectpath(“删除一个扩展名”)。 (引用的部分来自官方的expand()文档。)

所以当你在文件/a/b/ClassIAmAboutToCreate.java中创build一个新的类时,你应该input:

 public class xclass { 

当您按下“xclass”后的空格时,缩写将被扩展为public class ClassIAmAboutToCreate ,这正是您所需要的。

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