4

所以,我想编辑文件[1]。问题是,我还有一个名为1. 我还使用 cygwin 及其bashshell、win32cmd和 Linux。有时我使用 cygwin 的vim,有时我使用 win32vimgvim.

我找不到打开文件的一致方式[1]。通常vim[1]被视为一个文件 glob,并1改为打开。

在linux中,:e [1]失败,但:e \[1]有效。在win32中,:e \[1]失败。

我似乎陷入了一个曲折的迷宫迷宫,其中涉及fnameescape()shellslashisfname选项,以及 win32vim试图\作为路径分隔符处理。

啊哈!

:e [[]1]似乎工作(?)。肯定有一些“官方”的方式(比如调用 vim 函数)来达到这种模式吗?(编辑:不,这仅在[1] 已经存在时才有效。叹息。)

编辑

在 Ingo Karkat 的回答之后,我的文件加载 bash 脚本现在包含以下代码段:

# Double single quotes are single quotes in a single-quoted vim string (got that?)
FILE=${FILE//\'/\'\'}
[[ -n $FILE ]] && gvim -u NONE -U NONE -f --remote-send '<c-\><c-n>:let b = bufwinnr('\'"$FILE"\'')|if b != -1|exec b "wincmd w"|else|new `='\'"$FILE"\''`|endif<cr>'
gvim -u NONE -U NONE -e -s --cmd 'let a = remote_foreground("GVIM")|q'
4

1 回答 1

6

有:

:edit `='[1]'`

这(错误?-)使用反引号扩展作为 Vim 表达式 ( :help `=)。不利的一面是,该模式现在很容易使用该'wildignore'选项进行过滤。

我们曾经对这个问题进行了长时间的讨论;但它以某种方式失败了,没有采取任何行动。所以目前,文件名的字面使用也可以被解释为文件 glob 是毛茸茸的,大多数插件都处理得不好(包括我的),因为帮助中的一致建议是使用fnamescape(),它不能处理这个。

于 2013-02-27T11:51:20.237 回答