Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在unix和windows计算机之间同步vimrc和插件_Vim - Fatal编程技术网

在unix和windows计算机之间同步vimrc和插件

在unix和windows计算机之间同步vimrc和插件,vim,Vim,我使用所描述的方法在多台机器上保持vimrc和插件的同步。我遇到的问题是一台机器运行ubuntu,另一台运行win7 到目前为止,我发现了两种类型的问题。第一种似乎是以行结尾。为了让我的windows vimrc在linux机器上被读取,我必须执行:设置fileformat=unix并写入。但即使这样做了,我也会在所有插件上遇到类似的行尾问题: jg@jg-VirtualBox:~$ vim ~/.vimrc Error detected while processing /home/jg/.v

我使用所描述的方法在多台机器上保持vimrc和插件的同步。我遇到的问题是一台机器运行ubuntu,另一台运行win7

到目前为止,我发现了两种类型的问题。第一种似乎是以行结尾。为了让我的windows vimrc在linux机器上被读取,我必须执行
:设置fileformat=unix并写入
。但即使这样做了,我也会在所有插件上遇到类似的行尾问题:

jg@jg-VirtualBox:~$ vim ~/.vimrc
Error detected while processing /home/jg/.vimrc:
line   11:
E484: Can't open file /home/jg/vimfiles/plugin/autotag.vim
Error detected while processing /home/jg/.vim/plugin/DrawIt.vim:
line   60:
E492: Not an editor command: ^M
line   62:
E15: Invalid expression: &cp^M
line 1290:
E171: Missing :endif
Error detected while processing /home/jg/.vim/plugin/auto_number.vim:
line    5:
E488: Trailing characters
我可以做一些类似于
vim~/.vim/***.vim
的事情来加载所有文件,然后
:argdo set ff=unix | w
以相同的方式修复所有文件,但这似乎是一个糟糕的方法,因为每当我从一台计算机用我的vim文件更新git repo并从另一台计算机中提取它时,我都必须记住进行此文件转换。有更好的办法吗

最后,vimrc中的某些配置细节,例如某些二进制文件的位置,将因操作系统而异。处理这些差异的最佳方法是什么?我应该在我的.vimrc中添加在has上分支的if语句(“gui_win32”),还是有更好的方法


谢谢

是的,您必须在vimrc中添加分支,以具有特定于机器/操作系统的设置。这并不像听起来那么肮脏:一个
if
/
ifelse
/
endif
就足够了

另一种方法是将特定于机器/操作系统的设置保存在一个单独的非版本控制文件中:因为它非常本地化,所以不需要在其他机器/操作系统上传播其内容

您可以将这些设置放在
~/.vim/vimrc.local
中,并明确地将该文件添加到
.gitignore
~/.vimrc.local
中的repo之外,并从您的vimrc获取该文件


Vim在Linux上处理Windows行结束时有问题,但在Windows上处理Linux行结束时没有问题。只要在任何地方都使用Linux行结束符,就可以了。

处理行结束符的另一种方法是使用Git设置(在Linux上尝试
Git config--global core.autocrlf input
)。