我想在Vim中获取没有文件扩展名的文件名。
我在.vimrc
文件中编写了以下函数以进行编译并运行Java程序。
:function! JAVA_RUN()
:!javac %^M
:endfunction
map <F3> :execute JAVA_RUN()<CR> :source $HOME/.vimrc<CR>
在功能方面,我怎样才能获得没有扩展名的文件名。
答案 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
的参数中:r
和expand()
的组合。 %
是&#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 + ] 来触发缩写,这样可以避免在类名后插入空格。