У меня есть этот кусок кода в моем .vimrc для того, чтобы файлы разных типов открывались в разных экземплярах gVim.
function GetSvrName(ext)
if !exists('s:ext2srv')
let s:ext2srv = [
\['PHP', ['php', 'phtml']],
\['JS', ['js']],
\['CSS', ['css']],
\['HTML', ['htm', 'html', 'dwt', 'lbi']],
\['PY', ['py']],
\['TXT', ['txt', 'text', 'md', 'mkd']],
\['C', ['c', 'cpp', 'h', 'hpp']],
\['LOG', ['log']],
\['INI', ['ini', 'conf']],
\['BAT', ['bat', 'sh']],
\]
endif
for srv in s:ext2srv
for extname in srv[1]
if a:ext == extname
return srv[0]
" break
endif
endfor
endfor
return 'GVIM'
endfunction
function VimDispatch()
if &diff || !argc()
return 0
endif
let l:argv = argv()
for a in l:argv
let l:sp = expand('/')
let l:lastsp = strridx(a, l:sp)
let l:file = strpart(a, l:lastsp + 1)
let l:lastdot = strridx(l:file, '.')
let l:ext = strpart(l:file, l:lastdot + 1)
let l:srvname = GetSvrName(l:ext)
exe 'silent !start gvim --servername ' . l:srvname . ' --remote-tab-silent "' . a . '"'
call remote_foreground(l:srvname)
endfor
exit
endfunction
call VimDispatch()
Но у него есть некоторые проблемы. Во-первых, некоторые файлы не могут быть открыты больше. Например, когда я открываю файл, имя которого содержит строку ~!
появляется окно сообщения:
Error detected while processing function VimDispatch:
line 12:
E34: No previous command
Или, если имя файла содержит @#
:
Error detected while processing function VimDispatch:
line 12:
E194: No alternate file name to substitute for '#': silent !start gvim --servername TXT --remote-tab-silent
"D:\@#.txt"
И файл не открывается.
Итак, как мне решить эту проблему, чтобы мой код работал с этими именами файлов?