3

我的 .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

4 回答 4

4

如果您不$MYVIM想像 ZyX 建议的那样引入变量,也许另一种方法是将运行时文件放入而不是Windows$HOME/.vim上的默认值。$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
于 2012-09-13T20:17:05.630 回答
1

也许您想要的是directory根据中的条目进行设置runtimepath?尝试这个:

let &directory = substitute(&rtp, ",", "/swapfiles//,", "g")

runtimepath使用Unix-y 系统上的默认设置,您将获得

$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//

我同意,后面的目录是不需要的,但是 vim 会选择存在的第一个目录并允许创建文件,所以如果你不创建 swapfiles 子目录,它们就不会被触及。

您可能需要考虑将这些添加到默认值而不是替换它,以便在不存在任何目录时可以使用默认值作为后备。

我不明白你为什么有你提到的自动命令。runtimepathwith的默认设置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>)

并更改sourceSource文件可能不存在的时间。

于 2012-09-13T19:51:24.007 回答
0

我完全同意 Geoff Reedy 的观点,认为 autocmd 是不必要的。在其他情况下,您可以使用:runtime代替:source. 它将自动搜索所有(用户和系统目录在'runtimepath'.

于 2012-09-13T20:13:14.083 回答
0

首先,vim 在 windows 上将所有正斜杠转换为反斜杠,因此使用斜杠不会造成伤害。以防万一您认为这可能是麻烦的根源。

其次,在 Windows 上拥有和所有其他目录并非不可能~/.vim,只是某些程序不想使用以点开头的名称。您可以将其添加到 runtimepath,因为它在 Windows 上默认不存在,并将所有用户配置移到那里。

第三,在大多数地方,您都有一个可以使用的文件名$ENV_VAR。它包括设置 &rtp、&directory 和使用: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 不会修改或存储东西)。它将通过安装、更新和卸载过程进行修改,而不是其他任何内容。

于 2012-09-13T20:00:36.777 回答