我的.vimrc文件中有这一行:
set directory=~/.vim/swapfiles//
(请注意,一个额外的斜杠使得包含目录名称而不仅仅是文件名以减少冲突)
以上配置在我的Linux机器上运行正常,但问题是当我在Windows上使用相同的文件时,我得到一些关于该文件无法读取的警告。这可能是因为vim正在寻找~/.vim/swapfiles/
目录,而Windows很遗憾没有。
有没有办法将我的交换文件存储在某个的Windows上(如果它可以在C:\Program Files\Vim\vimfiles\
中更好?
如果你对我的上述问题得到答案,那么这是另一个问题。我也有一些与此类似的行:
autocmd filetype python source ~/path/to/file/python.vim
Windows此时也会感到困惑。我怎么补丁?
答案 0 :(得分:4)
如果您不想像ZyX建议的那样引入$MYVIM
变量,可能另一种方法是将运行时文件放在$HOME/.vim
而不是Windows上的默认$HOME/vimfiles
。然后,您可以在任何地方使用~/.vim/...
。这也有助于跨多个混合平台机器同步文件。
" On Windows, also use '.vim' instead of 'vimfiles'; this makes synchronization
" across (heterogeneous) systems easier.
if has('win32') || has('win64')
set runtimepath=$HOME/.vim,$VIM/vimfiles,$VIMRUNTIME,$VIM/vimfiles/after,$HOME/.vim/after
endif
答案 1 :(得分:1)
也许你想要的是根据directory
中的条目设置runtimepath
?试试这个:
let &directory = substitute(&rtp, ",", "/swapfiles//,", "g")
在Unix-y系统上使用默认的runtimepath
设置
$HOME/.vim/swapfiles//,
$VIM/vimfiles/swapfiles//,
$VIMRUNTIME/swapfiles//,
$VIM/vimruntime/after/swapfiles//,
$HOME/.vim/after//
并在Windows上
$HOME/vimfiles/swapfiles//,
$VIM/vimfiles/swapfiles//,
$VIMRUNTIME/swapfiles//,
$VIM/vimfiles/after/swapfiles//,
$HOME/vimfiles/after/swapfiles//
我同意,after目录是不需要的,但是vim将选择存在的第一个目录并允许创建文件,因此如果你不创建swapfiles子目录,它们将不会被触及。
您可能需要考虑将这些替换为默认值而不是替换它,以便在没有目录存在的情况下将默认值作为后备。
我不明白为什么你有你提到的自动命令。 runtimepath
filetype plugin on
的默认设置应该为您处理。
当然,您始终可以选择明确检查平台并使用
中的不同设置if has("win32")
" settings for windows
elif has("win32unix")
" settings for cygwin
elif has("unix")
" settings for unix
elif has("macunix")
" settings for macosx
endif
如果您想在文件不存在时避免错误,那么您可以在vimrc中使用以下定义
func! Source(file)
if filereadable(a:file)
exec "source " . fnameescape(a:file)
endif
endfunction
com! -nargs=1 -complete=file Source call Source(<f-args>)
并在文件可能不存在时将source
更改为Source
。
答案 2 :(得分:0)
首先,vim将所有正斜杠转换为在窗口向后倾斜,因此不会伤害斜线。以防你认为它可能是麻烦的来源。
其次,在Windows上拥有~/.vim
和所有其他目录并非不可能,只是某些程序不希望使用以点开头的名称。您可以将它添加到runtimepath,因为默认情况下它不在Windows上并在那里移动所有用户配置。
第三,在大多数地方,您可以使用$ENV_VAR
的文件名。它包括设置&amp; rtp,&amp;目录并使用:source
。所以解决方案可能如下:
if has('win16') || has('win95') || has('win32') || has('win64')
let $MYVIM=$HOME.'/vimfiles'
else
let $MYVIM=$HOME.'/.vim'
endif
set directory=$MYVIM/swapfiles
autocmd FileType python :source $MYVIM/after/ftplugin/python.vim
(虽然我同意@Geoff Reedy认为不应该使用最后一行)。
最后,修改和存储C:\Program Files
中的内容并不是最好的主意,既不适合你也不适合程序本身(顺便说一下,除非你告诉它,否则vim不会修改或存储某些内容) 。它将通过安装,更新和卸载过程进行修改,而不是通过任何其他过程进行修改。
答案 3 :(得分:0)
我完全赞同Geoff Reedy认为autocmd不是必需的。在其他情况下,您可以使用:runtime
代替:source
。它将自动搜索所有('runtimepath'
中的用户和系统目录。