设置vim背景透明

时间:2016-06-08 20:54:24

标签: matrix vim terminal vim-plugin color-scheme

我正在使用Matrix colorscheme和CSApprox作为我的终端vim。

我似乎无法将背景设置为透明。我已经尝试过编辑matrix.vim文件,但它没有做得更好。

这是matrix.vim

" vim:set ts=8 sts=2 sw=2 tw=0:
"
" matrix.vim - MATRIX like colorscheme.
"
" Maintainer: MURAOKA Taro <koron@tka.att.ne.jp>
" Last Change:  10-Jun-2003.

set background=dark
hi clear
if exists("syntax_on")
syntax reset
endif

let g:colors_name = 'matrix'

hi Comment guifg=#226622
hi Constant guifg=#55ff55
hi Special guifg=#44cc44
hi Identifier guifg=#55ff55
hi Statement guifg=#55ff55 gui=bold
hi PreProc guifg=#339933
hi Type guifg=#55ff55 gui=bold
hi Underlined guifg=#55ff55 gui=underline
hi Error guifg=#55ff55
hi Todo guifg=#113311 gui=none
hi Cursor guifg=#226622
hi lCursor guifg=#226622
hi CursorIM guifg=#226622
hi Directory guifg=#55ff55
hi DiffAdd guifg=#55ff55 gui=none
hi DiffChange guifg=#55ff55 gui=none
hi DiffDelete guifg=#113311 gui=none
hi DiffText guifg=#55ff55 gui=bold
hi ErrorMsg guifg=#55ff55
hi VertSplit guifg=#339933
hi Folded guifg=#44cc44
hi FoldColumn guifg=#44cc44
hi IncSearch guifg=#226622 gui=none
hi LineNr guifg=#44cc44 gui=none
hi ModeMsg guifg=#44cc44
hi MoreMsg guifg=#44cc44
hi NonText guifg=#44cc44 guibg=NONE ctermbg=none
hi Normal guifg=#44cc44 guibg=NONE ctermbg=none
hi Question guifg=#44cc44
hi Search guifg=#113311 gui=none
hi SpecialKey guifg=#44cc44
hi StatusLine guifg=#55ff55 gui=none
hi StatusLineNC guifg=#113311 gui=none
hi Title guifg=#55ff55 gui=bold
hi Visual guifg=#55ff55 gui=none
hi VisualNOS guifg=#44cc44
hi WarningMsg guifg=#55ff55
hi WildMenu guifg=#226622

和我的.vimrc文件

set nocompatible
filetype off

set rtp+=~/.vim/bundle/Vundle.vim/
call vundle#begin()

Plugin 'gmarik/Vundle.vim'
Plugin 'fatih/vim-go'
Plugin 'vim-airline/vim-airline'
" Plugin 'vim-airline/vim-airline-themes'
Plugin 'airblade/vim-gitgutter'
" Plugin 'altercation/vim-colors-solarized'
Bundle 'morhetz/gruvbox'
Plugin 'tpope/vim-git'
Plugin 'Valloric/YouCompleteMe'
Plugin 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }
" Plugin 'flazz/vim-colorschemes'
Plugin 'godlygeek/csapprox'

call vundle#end()

filetype plugin indent on
syntax on
syntax enable

#...
#...
#...
#...
#...

set t_Co=256
colorscheme matrix

如果我在命令提示符中输入hi Normal guifg=#44cc44 guibg=NONE ctermbg=none,它会按预期显示。但不是在matrix.vim中宣布的时候。我也尝试在colorscheme matrix .vimrc之后添加它,但它没有帮助。

首次加载时的样子。

enter image description here

输入命令后的样子

enter image description here

5 个答案:

答案 0 :(得分:56)

您不必更改colorscheme中的任何内容,只需将以下内容添加到.vimrc中:

hi Normal guibg=NONE ctermbg=NONE

答案 1 :(得分:6)

例如,如果您在.vimrc的第5行加载了一个插件,那么,如果您更改了第6行,这并不意味着Vim会完全加载该插件,然后再运行第6行!

这就是为什么,您应该使用autocmd命令,因为在这种情况下,它可以确保所有插件都完全加载,然后您的命令将在此之后运行

在这种情况下:

" transparent bg
autocmd vimenter * hi Normal guibg=NONE ctermbg=NONE
" For Vim<8, replace EndOfBuffer by NonText
autocmd vimenter * hi EndOfBuffer guibg=NONE ctermbg=NONE

现在,您确定在所有内容加载之后,您正在运行命令。

答案 2 :(得分:1)

使用这个gist。 我编译了一些设置以使 vim 透明。

答案 3 :(得分:1)

上面的答案并没有解决所有问题,当我们进入 vim 时,它们将 bg 更改为透明(因此出现“VimEnte”事件),但是当您再次获取 init.vim 文件时,背景会恢复(这是因为在获取文件时,不会执行 VimEnter 自动命令)。

我不会直接发布正确答案,而是解释如何找到它:

所以,首先,我们需要了解当 vim 打开时会发生什么:

vi -V10debug.log +q

这将创建一个 debug.log,您可以在其中查看执行的自动命令及其顺序。

<块引用>
autocmd vimenter * hi Normal guibg=NONE ctermbg=NONE
" For Vim<8, replace EndOfBuffer by NonText
autocmd vimenter * hi EndOfBuffer guibg=NONE ctermbg=NONE```

如果我们正在使用它,我们会在日志中看到 VimEnter 将 bg 更改为 NONE(到目前为止还不错)。

但是,下面的命令打开vim,然后获取vimrc然后退出(为了更快找到我已经放了一些打印语句)

vi -V10debug_so.log +'!echo sourcing'  +'source ~/.config/nvim/init.vim' +'!echo sourced' +q

在新日志中,我们看到,在 so VimEnter 不再被调用之后,bg 恢复到主题默认。

但是,我们也可以注意到当一个文件被获取时会发生一些事件,我们将重点关注以下内容

  1. SourcePre - 采购前
  2. SourcePost - 采购后

可以使用 SourcePost 事件修复上述不完整的解决方案。所以新的和正确的自动命令是 (最终答案)

    " Workaround for creating transparent bg
    autocmd SourcePost * highlight Normal     ctermbg=NONE guibg=NONE
            \ |    highlight LineNr     ctermbg=NONE guibg=NONE
            \ |    highlight SignColumn ctermbg=NONE guibg=NONE

总是在一个组中使用它,请参阅此作为参考 - https://github.com/kalkayan/dotfiles/blob/main/.config/nvim/init.vim

答案 4 :(得分:0)

我使用 macvim,即使我把它放在 .vimrc 中的 hi Normal guibg=NONE ctermbg=NONE 之后,colorscheme 也不适合我

但我发现 :set transparency=20 | :set blurradius=90 对我来说效果很好。在 macvim 的帮助下,他们确实声明这两个命令{不在 Vi 中}和{仅在 MacVim GUI 中}。