vim配置(无插件,含状态栏,背景透明等)

状态栏

我不是很喜欢用插件,因为我觉得插件会影响我编辑器的启动速度,虽然我知道有些插件影响得很小。比方说airline,它只会延迟100ms,但是我依然不想用,大概是有洁癖。所以我自己写了一个简易的状态栏,可以展示必要的信息,同时也可以自定义颜色。

set statusline=%1*\%<%.50F\             "显示文件名和文件路径 (%<应该可以去掉)
set statusline+=%=%2*\%y%m%r%h%w\ %*        "显示文件类型及文件状态
set statusline+=%3*\%{&ff}\[%{&fenc}]\ %*   "显示文件编码类型
set statusline+=%4*\ row:%l/%L,col:%c\ %*   "显示光标所在行和列
set statusline+=%5*\%3p%%\%*            "显示光标前文本所占总文本的比例
hi User1 cterm=none ctermfg=25 ctermbg=0 
hi User2 cterm=none ctermfg=208 ctermbg=0
hi User3 cterm=none ctermfg=169 ctermbg=0
hi User4 cterm=none ctermfg=100 ctermbg=0
hi User5 cterm=none ctermfg=green ctermbg=0
  • %< 如果状态行过长,在何处换行
  • %F 完整文件路径名
  • %.50F 文件路径名长度不超过50,超过则进行缩写
  • %= 在此之后的内容,显示在状态栏上时右对齐
  • %y 文件类型
  • %m 如果缓冲区已修改则表示为[+]
  • %r 如果缓冲区为只读则表示为[RO]
  • %h 如果为帮助缓冲区显示为[Help]
  • %w 如果为预览窗口则显示为[Preview]
  • %{&ff} 显示文件系统类型
  • %{&fenc} 显示文件编码
  • %l 光标所在行数
  • %L 文件总行数
  • %c 光标所在列数
  • %p 当前行数占总行数的的百分比
  • cterm:设置粗体,斜体,正体;ctermfg:前景色;ctermbg:背景色

%number *\ ... \%*hi User<number>对应,hi User<number>后面设置的颜色样式会应用到%number *\ ... \%*中的...部分

vim效果图
vim效果图

背景透明

从上图我们不仅可以看到最下面的状态栏,还可以发现vim的背景是透明的。vim的背景透明是通过hi Normal ctermfg=252 ctermbg=none实现的,但是这条语句依赖于你的终端透明,它需要你的终端可以设置透明背景,我这里是ubuntu系统自带的终端。

创建新文件自动加上文件头

我喜欢在代码文件开头写一些注释,比如作者信息,因此我还希望我的vim可以根据我新创建的文件类型,自动选择相应的文件头。这个功能我觉得很棒。这个功能实现起来也非常简单,定义一个函数然后调用就可以了。

"创建文件头
autocmd BufNewFile *.py,*.tex exec ":call SetTitle()"
func! SetTitle() 
    if &filetype == 'python'
        call setline(1,"#!/usr/bin/env python3")
        call append(line("."),"# -*- coding:UTF-8 -*-")
        call append(line(".")+1,"##########################################################################")
        call append(line(".")+2, "# File Name: ".expand("%"))
        call append(line(".")+3, "# Author: stubborn vegeta")
        call append(line(".")+4, "# Created Time: ".strftime("%c"))
        call append(line(".")+5, "##########################################################################")
    endif
    if &filetype == 'plaintex'
        call setline(1,"% -*- coding:UTF-8 -*-")
        call append(line("."),"%#########################################################################")
        call append(line(".")+1, "% File Name: ".expand("%"))
        call append(line(".")+2, "% Author: stubborn vegeta")
        call append(line(".")+3, "% Created Time: ".strftime("%c"))
        call append(line(".")+4, "%#########################################################################")
    endif
    normal Go 
endfunc

下面分别是我新建一个python文件和新建一个LaTeX文件的效果图。


python
python
LaTeX
LaTeX

此外,还有括号补全,编译系统设置和一些快捷键设置,配置文件里都写的很清楚了。我没有设置引号补全,因为我写python时经常用三个引号,补全之后反而很麻烦。

" All system-wide defaults are set in $VIMRUNTIME/debian.vim and sourced by
" the call to :runtime you can find below.  If you wish to change any of those
" settings, you should do it in this file (/etc/vim/vimrc), since debian.vim
" will be overwritten everytime an upgrade of the vim packages is performed.
" It is recommended to make changes after sourcing debian.vim since it alters
" the value of the 'compatible' option.

" This line should not be removed as it ensures that various options are
" properly set to work with the Vim-related packages available in Debian.
runtime! debian.vim

" Vim will load $VIMRUNTIME/defaults.vim if the user does not have a vimrc.
" This happens after /etc/vim/vimrc(.local) are loaded, so it will override
" any settings in these files.
" If you don't want that to happen, uncomment the below line to prevent
" defaults.vim from being loaded.
" let g:skip_defaults_vim = 1

" Uncomment the next line to make Vim more Vi-compatible
" NOTE: debian.vim sets 'nocompatible'.  Setting 'compatible' changes numerous
" options, so any other options should be set AFTER setting 'compatible'.
"set compatible

" Vim5 and later versions support syntax highlighting. Uncommenting the next
" line enables syntax highlighting by default.
if has("syntax")
  syntax on
endif

" If using a dark background within the editing area and syntax highlighting
" turn on this option as well
"set background=dark

" Uncomment the following to have Vim jump to the last position when
" reopening a file
"if has("autocmd")
"  au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
"endif

" Uncomment the following to have Vim load indentation rules and plugins
" according to the detected filetype.
if has("autocmd")
  filetype plugin indent on
endif

" The following are commented out as they cause vim to behave a lot
" differently from regular Vi. They are highly recommended though.
"set showcmd        " Show (partial) command in status line.
"set showmatch      " Show matching brackets.
"set ignorecase     " Do case insensitive matching
"set smartcase      " Do smart case matching
"set incsearch      " Incremental search
"set autowrite      " Automatically save before commands like :next and :make
"set hidden     " Hide buffers when they are abandoned
"set mouse=a        " Enable mouse usage (all modes)

" Source a global configuration file if available
if filereadable("/etc/vim/vimrc.local")
  source /etc/vim/vimrc.local
endif
let mapleader=" "           " 设置leader键为空格键
set nocompatible            " 不以兼容模式运行
set encoding=utf-8          " utf-8编码
set helplang=cn             " 中文帮助文档
set number              " 显示行号
set wrap                " 自动换行
set showcmd             " 显示输入信息
set cursorline              " 显示光标所在行
set wildmenu                " 显示补全提示
set hlsearch                " 高亮搜索结果
"set foldenable                 " 允许折叠 
"set foldmethod=manual          " 手动折叠  
"打开vim运行nohlsearch,取消高亮
exec "nohlsearch"       
set ts=4                " 设置tab键长度为四个空格
set expandtab           " 设置tab键替换为四个空格键
" 将文件中的tab键替换成空格
map <LEADER>    :retab!<CR>
set incsearch               " 一边输入一边高亮  
set ignorecase              " 忽略大小写
set smartcase               " 智能大小写 
set laststatus=2            " 设置状态栏在倒数第2行

" 设置状态栏格式
"set statusline=%<%F%=%y%m%r%h%w%{&ff}\[%{&fenc}]0x%02B@%040h#%n\(%3l/%3L,%3c\|%3v\)%3p%%
set statusline=%1*\%<%.50F\             "显示文件名和文件路径 
set statusline+=%=%2*\%y%m%r%h%w\ %*        "显示文件类型及文件状态
set statusline+=%3*\%{&ff}\[%{&fenc}]\ %*   "显示文件编码类型
set statusline+=%4*\ row:%l/%L,col:%c\ %*   "显示光标所在行和列
set statusline+=%5*\%3p%%\%*            "显示光标前文本所占总文本的比例
hi User1 cterm=none ctermfg=25 ctermbg=0 
hi User2 cterm=none ctermfg=208 ctermbg=0
hi User3 cterm=none ctermfg=169 ctermbg=0
hi User4 cterm=none ctermfg=100 ctermbg=0
hi User5 cterm=none ctermfg=green ctermbg=0

set mouse=a             " 启用鼠标
set backspace=indent,eol,start      " 退格键可以退到上一行
set scrolloff=5             " 光标行上下移动范围各缩小5行
"set ruler
"set transparency=11
" 设置背景透明
hi Normal ctermfg=252 ctermbg=none
"寻找下一搜索结果,并将其置于屏幕中心
noremap = nzz               
"寻找上一搜索结果,并将其置于屏幕中心
noremap - Nzz
"取消高亮
noremap <LEADER><CR> :nohlsearch<CR>
map s <nop>
"保存
map S :w<CR>
"退出
map Q :q<CR>
"右分屏,聚焦右窗口
map sl :set splitright<CR>:vsplit<CR>
"左分屏,聚焦左窗口
map sh :set nosplitright<CR>:vsplit<CR>
"上分屏,聚焦上窗口
map sk :set nosplitbelow<CR>:split<CR>
"下分屏,聚焦下窗口
map sj :set splitbelow<CR>:split<CR>
"光标移至右窗口
map <LEADER>l <C-w>l
"光标移至上窗口
map <LEADER>k <C-w>k
"光标移至下窗口
map <LEADER>j <C-w>j
"光标移至左窗口
map <LEADER>h <C-w>h
"窗口上移
map <up> :res +5<CR>
"窗口下移
map <down> :res -5<CR>
"窗口左移
map <left> :vertical resize-5<CR>
"窗口右移
map <right> :vertical resize+5<CR>
"新建标签页
map <C-n> :tabe<CR>
"前一标签页
map t- :-tabnext<CR>
"后一标签页
map t= :+tabnext<CR>
"重新加载vim配置文件
map rc :source $MYVIMRC<CR>
"寻找两个相等的单词
map <LEADER>fd /\(\<\w\+\>\)\_s*\1
"替换占空符<++>
map <LEADER><LEADER> <ESC>/<++><CR>:nohlsearch<CR>c4l
"全选
map <C-a> ggVG
"打开我的vimrc
map <LEADER>rc :e ~/.vimrc<CR>
"复制到系统剪切板
map +y "+y
"从系统剪切板粘贴
map +p "+p

set list
set listchars=tab:>-,trail:-
"自动匹配括号
:inoremap ( ()<ESC>i
:inoremap ) <c-r>=ClosePair(')')<CR> 
:inoremap { {}<ESC>i
:inoremap } <c-r>=ClosePair('}')<CR>
:inoremap [ []<ESC>i
:inoremap ] <c-r>=ClosePair(']')<CR>
:inoremap < <><ESC>i
:inoremap > <c-r>=ClosePair('>')<CR>
function! ClosePair(char)
    if getline('.')[col('.') - 1] == a:char
        return "\<Right>"
    else
        return a:char
    endif
endfunction

" let &t_SI = "\<Esc>]50;CursorShape=1\x7" 
" let &t_SR = "\<Esc>]50;CursorShape=2\x7" 
" let &t_EI = "\<Esc>]50;CursorShape=0\x7" 
"打开文件,光标回到上次编辑的位置
au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
"创建文件头
autocmd BufNewFile *.py,*.tex exec ":call SetTitle()"

func! SetTitle() 
    if &filetype == 'python'
        call setline(1,"#!/usr/bin/env python3")
        call append(line("."),"# -*- coding:UTF-8 -*-")
        call append(line(".")+1,"##########################################################################")
        call append(line(".")+2, "# File Name: ".expand("%"))
        call append(line(".")+3, "# Author: stubborn vegeta")
        call append(line(".")+4, "# Created Time: ".strftime("%c"))
        call append(line(".")+5, "##########################################################################")
    endif
    if &filetype == 'plaintex'
        call setline(1,"% -*- coding:UTF-8 -*-")
        call append(line("."),"%#########################################################################")
        call append(line(".")+1, "% File Name: ".expand("%"))
        call append(line(".")+2, "% Author: stubborn vegeta")
        call append(line(".")+3, "% Created Time: ".strftime("%c"))
        call append(line(".")+4, "%#########################################################################")
    endif
    "autocmd BufNewFile * normal G 
    normal G 
endfunc
" 设置注释快捷键 
map <LEADER>r :call Note()<CR>
func! Note()
    if &filetype == 'python'
        normal 0i# 
    endif
    if &filetype == 'vim'
        normal 0i" 
    endif
    if &filetype == 'plaintex'
        normal 0i% 
    endif
endfunc
" 设置取消注释  
map <LEADER>t 0df j
"编译运行
map <F5> :call RunPython()<CR>
func! RunPython()
    exec "W"
    if &filetype == 'python'
       " exec "!time python3.6 %"
    "exec ":set splitbelow<CR>:split<CR>"
    exec "!time python3.6 %"

    endif
    if &filetype == 'dot'
    exec "!dot % -T png -o %.png"
    exec "!feh %.png"
    endif
endfunc

"colorscheme molokai
set t_Co=256            "开启256色支持
"set background=dark
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容

  • 向前向前向前
    realfranker阅读 246评论 1 3
  • 前几天心血来潮想下厨。给宝宝做了个鳕鱼杂粮炒饭。 朋友们发现了亮点: 你用橄榄油来炒饭吗?橄榄油只能凉拌吧?? 好...
    维他命希阅读 428评论 0 1
  • 今天是当然的生日。以下的话致当然。 雨下得好大,吧嗒吧嗒。原来以为台风过了,以后都晴天了。台风的一个好是可以让人骑...
    三九九阅读 267评论 0 0
  • 当破晓初开, 当爱情再来, 我一定是你的白马王子, 牵着你最爱的一切, 为你穿上你最美的嫁衣。 为你给你守候你的最...
    草芥人阅读 590评论 0 0
  • 愿你辗转之后能回到原地 愿你能看到一直在原地等你的我
    锅包肉耶阅读 113评论 0 0