我在多台机器上使用相同版本的.vimrc。

是否有一种方法可以根据计算机名称或类似的名称自定义该文件以启用/禁用插件?

例如,我的计算机中有类似的内容。 bash_profile:

 # common things
...

if [[ $(uname) == "Darwin" ]]
then
     # mac settings
else
     # linux settings
fi
 


评论

我认为这是重复的:vi.stackexchange.com/q/4721/1841或至少相关程度很高。想法是在每台包含自己的插件的计算机上放置自定义的vim​​rc。

是的,我认为保留单独的计算机特定文件是最可靠/最轻松的方法。 .vimrc不必“知道”有关它在哪台计算机上的任何信息。而且,您将永远不会再直接触摸.vimrc文件,除非一起更新所有文件,以避免偶然使它们不同步的机会。

#1 楼

您可以从vim访问环境变量和外部命令,因此可以执行以下操作:

if system('uname') =~ "Darwin"
     echo 'mac'
else
     echo 'other'
endif


请注意,可以使用=~而不是==来匹配正则表达式而不是确切的字符串(在我的机器上,uname给我换行符)。



if exists('$TMUX')
  echo 'in tmux'
else
  echo 'not in tmux'
endif


#2 楼

为了不依赖外部命令,我的建议是使用类似于以下内容的东西:

if has('mac')
     echo 'mac'
elseif has('win32') || has('win64')
     echo 'windows'
elseif has('unix')
     echo 'unix/linux'
else
     echo 'something else'
endif


评论


这在MacVim中有效,但不适用于macOS中包含的版本,其中has('mac')(和has('macunix'))都返回0。(最近在High Sierra中进行了测试)。

–丰富
18 Mar 2 '18在10:03



#3 楼

如果您(或您的系统)可以导出所需的环境变量,则可以在.vimrc中执行类似的操作(此处以vim-plug插件管理器为例,而HOSTNAME是要检查的导出变量):

filetype off
call plug#begin('~/.vim/plugged')
...
if executable('ctags') && $HOSTNAME == 'macintosh'
    Plug 'Shougo/unite-outline'
    Plug 'tsukkee/unite-tag'
    Plug 'ludovicchabant/vim-gutentags'
endif
...
call plug#end()


通常,使用has()(例如has ("gui_running")has ("python"))来决定安装某些插件。

#4 楼

这不是问题的直接答案,但我认为仍然是一个合理的解决方案。

我处理此问题的方法是有几个.vimrc文件:



vimrc-all-所有常见问题

vimrc-win-Windows配置

vimrc-linux-Linux配置

vimrc-workMachine-我的工作计算机专用的东西

vimrc-homeMachine-我的家庭计算机专用的东西

在我的工作机器上,我创建了从~/.vimrc~/dotfiles/vimConfig/vimrc-workMachine的符号链接。

这是我的vimrc-workMachine的样子:

" ======================================
" Source general vim config
" ======================================
source ~/dotfiles/vimConfig/vimrc-all.vim
source ~/dotfiles/vimConfig/vimrc-linux.vim

" ======================================
" All other stuff
" ======================================