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

问题描述:

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

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

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

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

在这方面的功能我怎么能得到扩展名的文件名。

+0

你不必为此做一个函数'(地图:!java%:r )' – yesennes 2015-09-09 02:58:31

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

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

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

+0

非常感谢!用它作为一种简单的方法来转换当前文件格式而不用跳出vim。 – Jason 2011-08-16 19:38:37

+0

'%:r'和'% nggit 2017-06-08 01:58:44

+0

是的,但它很微妙。 '% tonio 2017-06-08 09:07:07

我从字面上只是读了一个类似的问题(因为别人似乎试图配置vim为他们用F键自动构建),并且写了an answer关于如何利用vim的功能:make命令,甚至不需要编写Makefile。就你而言,它与问题没有直接关系,但我想我会提及它,以防你感兴趣。

此外,有人似乎写了Vim Tips Wiki关于如何设置vim的:make命令来专门处理用蚂蚁构建的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 <C-R>=expand('%:t:r')<CR> 

把这行放到你的.vimrc(或类似)。一旦您按下空格,缩写将自动触发,因此我通常在它们前加'x'以避免其意外扩展。

这里的诀窍是:t:rexpand()的参数中的组合。 %是“当前文件名”,:t仅选择所有路径(“仅限最后一个路径组件”)并且仅选择012ot(“删除了一个扩展名”)t。 (报价部分均来自expand()文件。)

所以,当你在文件/a/b/ClassIAmAboutToCreate.java创建一个新的类,你可以键入:

public class xclass { 

你“xclass”后按下空格键的那一刻,缩写将扩展为public class ClassIAmAboutToCreate,这正是你需要。

另外,注意的缩写可以通过按下Ctrl键+]这避免了插入的类名称后的空间中而被触发。