如何从vimscript中的字符串中提取文件名?

如何从vimscript中的字符串中提取文件名?,vim,arguments,filenames,Vim,Arguments,Filenames,假设我们在vimscript中得到了这个字符串: “/home/Linus Torvalds/.vim/bundle/vim autoformat/formatters/tidy-q--显示错误0--显示警告0--缩进自动--缩进空格2--垂直空格是--整齐标记否--换行68” 如何提取文件名部分?在这种情况下,这将是: “/home/Linus Torvalds/.vim/bundle/formatters/tidy”如果您能保证路径本身没有破折号(-),我会这样做: matchstr(inp

假设我们在vimscript中得到了这个字符串:

“/home/Linus Torvalds/.vim/bundle/vim autoformat/formatters/tidy-q--显示错误0--显示警告0--缩进自动--缩进空格2--垂直空格是--整齐标记否--换行68”

如何提取文件名部分?在这种情况下,这将是:


“/home/Linus Torvalds/.vim/bundle/formatters/tidy”
如果您能保证路径本身没有破折号(
-
),我会这样做:

matchstr(input_string,'^.\{-}\ze -')
说明:从字符串的开头(
^
)不贪婪地匹配任何字符(
\{-}
),直到第一次出现空格后跟破折号(
\ze-


或者,您可以只匹配到第一个破折号,然后使用
substitute()
命令修剪任何尾随空格,这将不那么简洁,但可能更具可读性。

为什么需要这个?从其元素构建这样的命令要比稍后尝试解构它好得多。代码气味警报!我看到你的路径有空格,那为什么不破折号
-
?所以我认为文件名应该是
/home/Linus-Torvalds/.vim/bundle/formatters/tidy-q--show
或者甚至
/home/Linus-Torvalds/.vim/bundle/formatters/tidy-q-
文件名有什么规则吗?我不能保证文件名中没有破折号。我改变了这个例子,立即指出了这一点。路径由用户给定@IngoKarkat这就是为什么我不从它的元素构建它。这是一个可自定义的配置,我需要检查给定的formatprg是否可执行。您仍然可以将可执行文件及其参数作为单独的变量进行自定义。如果路径中允许破折号,我认为不可能(可靠地)识别路径的结尾和选项的开头,正如@Kent指出的那样。在您的示例中,我们如何知道没有名为
tidy-q
的目录或文件?我认为双变量方法要好得多。也许您可以提供一组默认选项,使大多数情况下的操作更简单。谢谢您的回复。但是,我不能保证路径没有破折号。我将改变这个例子来指出这一点。