Linux和Windows之间的配置文件路径冲突

时间:2012-09-13 19:26:06

标签: vim

我的.vimrc文件中有这一行:

set directory=~/.vim/swapfiles//

(请注意,一个额外的斜杠使得包含目录名称而不仅仅是文件名以减少冲突)

以上配置在我的Linux机器上运行正常,但问题是当我在Windows上使用相同的文件时,我得到一些关于该文件无法读取的警告。这可能是因为vim正在寻找~/.vim/swapfiles/目录,而Windows很遗憾没有。

有没有办法将我的交换文件存储在某个的Windows上(如果它可以在C:\Program Files\Vim\vimfiles\中更好


案例#2

如果你对我的上述问题得到答案,那么这是另一个问题。我也有一些与此类似的行:

autocmd filetype python source ~/path/to/file/python.vim

Windows此时也会感到困惑。我怎么补丁?

4 个答案:

答案 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'中的用户和系统目录。