【问题标题】:Get the file name without file extension in a Vim function在 Vim 函数中获取不带文件扩展名的文件名
【发布时间】:2010-04-09 07:52:52
【问题描述】:

我想在 Vim 中获取不带文件扩展名的文件名。

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

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

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

如何获取函数内部没有扩展名的文件名?

【问题讨论】:

  • 你不必创建一个函数来做到这一点,只需 (map &lt;F#&gt; :!java %:r &lt;Enter&gt;)

标签: vim


【解决方案1】:

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

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

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

【讨论】:

  • 非常感谢!将其用作转换当前文件格式而无需跳出 vim 的简单方法。
  • %:r%&lt;有区别吗?
  • 是的,但它很微妙。 %&lt; 仍然支持向后兼容 3.0,与 %:r 等效。首选:r 表单。它可以与其他修饰符组合使用,也可以多次使用,例如如果您有多个扩展名,例如.tar.gz
【解决方案2】:

如果您想扩展文件名(% 等除外),请查看 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】:

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

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

    将此行放在您的 .vimrc(或类似文件)中以使其工作。只要按下空格,缩写就会自动触发,因此我通常在它们前面加上“x”以避免它们意外扩展。

    这里的技巧是:t:rexpand() 的参数中的组合。 % 是“当前文件名”,:t 仅选择路径的 tail(“仅最后一个路径组件”),:r 仅选择 root(“删除了一个扩展”)。 (引用部分来自官方 expand() 文档。)

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

    public class xclass {
    

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

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

    【讨论】:

      【解决方案4】:

      我刚刚读到了一个与此类似的问题(因为其他人似乎正在尝试配置 vim 以使用 F 键为他们自动构建),并写了 an answer 关于如何利用 vim 的强大功能:make 命令甚至不需要编写 Makefile。在你的情况下,它与问题的直接关系不大,但我想我会提到它以防你感兴趣。

      此外,似乎有人在Vim Tips Wiki 上写了一些关于如何设置vim 的:make 命令以专门用于使用ant 构建的Java 项目的内容。我自己已经有一段时间没有使用 Java 了,但就您而言,这可能是一个很好的入门起点。

      【讨论】:

        猜你喜欢
        • 2011-06-15
        • 2011-10-02
        • 2011-05-25
        • 2015-05-20
        • 1970-01-01
        • 2015-05-13
        • 1970-01-01
        相关资源
        最近更新 更多