Vim:存在"1"时编辑"[1]"的便携方式

bob*_*ogo 4 vim bash cygwin cmd

所以,我想编辑文件[1].问题是,我也有一个名为的文件1.我也使用cygwin及其bashshell,win32 cmd和Linux.有时我使用cygwin vim,有时我使用win32 vimgvim.

我找不到打开文件的一致方法[1].通常vim会将[1]文件视为glob,1而是打开.

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

我似乎被困在一个曲折的迷宫中,涉及fnameescape(),shellslashisfname选项,以及win32 vim尝试处理\作为路径分隔符.

啊哈!

: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'
Run Code Online (Sandbox Code Playgroud)

Ing*_*kat 6

有:

:edit `='[1]'`
Run Code Online (Sandbox Code Playgroud)

这个(mis? - )使用反引号扩展作为Vim表达式(:help `=).缺点是该模式现在易于使用该'wildignore'选项进行过滤.

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