vim的配置

用户的vim配置文件是~/.vimrc,想要使当前正在编辑的配置文件生效,使用:so %
由于使用vim时,敲击esc的频率很高,我们可以考虑将caps映射成esc,在/etc/profile中增加xmodmap -e 'clear Lock' -e 'keycode 0x42 = Escape'即可

vim基本设置

" 保存光标位置
au BufReadPost * exe "normal! g`\""
" 开启文件类型的支持,并按文件类型打开对应的插件/进行对应的缩进方式
filetype plugin indent on
" 在输入括号时光标会短暂地跳到与之相匹配的括号处,不影响输入
set sm

" 折叠方式(不设定的话依靠语法折叠,要求对应语法文件里有设定)
"set foldmethod=indent
" 用空格打开折叠
nnoremap <space> @=((foldclosed(line('.'))<0)?'zc':'zo')<CR>
" 启动时自动折叠代码(超过三层的会被折叠)
set foldlevel=3
" 左栏宽度
set foldcolumn=0
" 保存折叠
au BufWinLeave * silent mkview
au BufWinEnter * silent loadview
" 光标遇到折叠,折叠就打开
"set foldopen=all
" 移开折叠时自动关闭折叠
"set foldclose=all

" 生成swap文件(用于vim崩溃后的回复等)
set swapfile
" 生成undo文件(用于撤销操作)
set undofile
set undodir=~/code/.undo
" 生成备份文件(记录上一个副本)
set backup
set backupext=.bak
set backupdir=~/code/.bak

vim外观

" 语法高亮,要放到前面,否则影响其他的显示配置
syntax enable
" 配色方案
colorscheme torte
" 行高亮
set cursorline
highlight CursorLine cterm=NONE ctermbg=darkgrey ctermfg=NONE
" 显示行号
set nu
" 改变行号文字/背景色
highlight LineNr ctermfg=white ctermbg=gray
" 背景
hi Normal ctermbg=NONE ctermfg=NONE
" 高亮搜索的关键字
set hls
" 折行
set display=lastline

vim脚本

使用let声明变量,除数值和字符串外,还支持list(使用[]声明)和dict(使用{}声明),在命令模式调用函数使用call指令

func! Compile()
    if &filetype == 'c'
        exec '!gcc % -o %:r -O2 -Wall -Dbhiaibogf -g'
    elseif &filetype == 'cpp'
        exec '!g++ % -o %:r -O2 -Wall -Dbhiaibogf -g -std=c++1z'
    elseif &filetype == 'python'
        exec '!python %'
    elseif &filetype == 'tex'
        exec '!xelatex %'
    elseif &filetype == 'markdown'
        exec 'MarkdownPreview'
    elseif &filetype == 'php' || &filetype == 'html'
        exec '!google-chrome-stable localhost/% &'
    endif
endfunc

func! Run()
    if &filetype == 'python'
        exec '!python %'
    elseif &filetype == 'tex'
        exec '!evince %<.pdf'
    else
        exec '!./%<'
    endif
endfun

快捷键

vim快捷键可用于多种模式:

  • nmap 普通模式
  • imap 插入模式
  • vmap 可视模式
  • cmap 命令行模式
  • omap 操作符等待模式(如dw输入d之后的情况)
  • map 普通,可视模式及操作符等待模式
  • map! 插入和命令行模式
  • []noremap 不会递归的进行映射

一些按键的表示方式:

  • 空格<space>
  • 回车<CR>
  • ctrl+K<C-K>
" 定义快捷键的前缀,即<Leader>
let mapleader=";"
" 写入只读文件(使用tee命令将缓存区的内容写入文件)
cmap ww w !sudo tee %
" 在缓冲区之间跳转
nmap <C-N> :bn<CR>
imap <C-N> :bn<CR>
nmap <C-P> :bp<CR>
imap <C-P> :bp<CR>
" 编译和运行
nmap <F9> :w<CR>:call Compile()<CR>
imap <F9> <ESC>:w<CR>:call Compile()<CR>
nmap <F10> :call Run()<CR>
imap <F10> <ESC>:call Run()<CR>

插件

Vundle

Vundle是一个插件管理软件,可以方便的安装/删除/更新插件
手动下载Vundlegit clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim然后进行配置

" 关闭对vi的兼容
set nocompatible
" 关闭vim对文件类型的支持
filetype off

" Vundle所在的目录
set rtp+=~/.vim/bundle/Vundle.vim
" 插件要安装的位置(在begin与end直接是需要用Vundle进行维护的插件)
call vundle#begin('~/.vim/bundle/')

" let Vundle manage Vundle
Plugin 'VundleVim/Vundle.vim'

call vundle#end()
" 开启文件类型的支持,并按文件类型打开对应的插件/进行对应的缩进方式
filetype plugin indent on

如果想要添加新的插件,只需在.vimrc中写入Plugin 'pluginaddr/pluginname',并执行:PluginInstall即可,使用PluginClear会清除不在.vimrc文件中的插件,使用PluginUpdate会更新所有位于列表中的插件

缩进线

Plugin 'Yggdroot/indentLine'

状态栏

Plugin 'vim-airline/vim-airline'

" 打开tabline功能,方便查看和切换Buffer
let g:airline#extensions#tabline#enabled = 1
" 使用powerline字体来设置airline的符号
let g:airline_powerline_fonts = 1

airline使用powerline的字体,这个可以在github下到或用pacman安装,推荐DejaVu Sans Mono for Powerline Book

批量注释

Plugin 'scrooloose/nerdcommenter'

使用<leader>cc来注释,<leader>cu来取消注释

目录显示与符号显示

" 文件管理
Plugin 'scrooloose/nerdtree'
" 符号管理(tagbar依赖于ctag)
Plugin 'majutsushi/tagbar'
" 窗口管理(很老的插件了,谁有替代品请留言告诉我)
Plugin 'Winmanager'

let g:NERDTree_title='NERDTree'
let g:Tagbar_title='Tagbar'
let g:winManagerWindowLayout='NERDTree|Tagbar'
function! NERDTree_Start()
    exec 'q'
    exec 'NERDTree'
endfunction
function! NERDTree_IsValid()
    return 1
endfunction
function! Tagbar_Start()
    exec 'q'
    exec 'TagbarOpen'
endfunction
function! Tagbar_IsValid()
    return 1
endfunction

" 窗口宽度
let winManagerWidth = 10
" 自动打开
let g:AutoOpenWinManager = 1
" 需要在winmanager.vim添加
"if g:AutoOpenWinManager
    "autocmd VimEnter * nested call s:ToggleWindowsManager()
"endif

" tagbar的高度
let g:tagbar_vertical = 12

markdown

安装以下插件,支持实时预览并且生成目录等

" 用于符号对齐
Plugin 'godlygeek/tabular'
" 更好的显示效果
Plugin 'plasticboy/vim-markdown'

" 实时预览并添加对数学公式的支持
Plugin 'iamcco/markdown-preview.vim'
Plugin 'iamcco/mathjax-support-for-mkdp'

" 用于生成被tagbar使用的tags
Plugin 'jszakmeister/markdown2ctags'
let g:tagbar_type_markdown = {
    \ 'ctagstype': 'markdown',
    \ 'ctagsbin' : '~/.vim/bundle/markdown2ctags/markdown2ctags.py',
    \ 'ctagsargs' : '-f - --sort=yes --sro=»',
    \ 'kinds' : [
        \ 's:sections',
        \ 'i:images'
    \ ],
    \ 'sro' : '»',
    \ 'kind2scope' : {
        \ 's' : 'section',
    \ },
    \ 'sort': 0,
\ }
" 生成目录
Plugin 'mzlogin/vim-markdown-toc'

c/c++语义补全

Plugin 'Valloric/YouCompleteMe'

" C++语义补全需要这个python脚本,你要做的是把编译时使用的编译选项加入这个文件
let g:ycm_global_ycm_extra_conf='~/.vim/.ycm_extra_conf.py'
" 跳转到定义处
nmap <c-j> :YcmCompleter GoTo<CR>|
" 显示当前变量的类型
nmap <c-k> :YcmCompleter GetType<CR>|
" 修改错误
nmap <c-h> :YcmCompleter FixIt<CR>|
" 停止提示是否载入本地ycm_extra_conf文件
let g:ycm_confirm_extra_conf = 0
" 语法关键字补全
let g:ycm_seed_identifiers_with_syntax = 1
" 在接受补全后不分裂出一个窗口显示接受的项
set completeopt-=preview
" 每次重新生成匹配项,禁止缓存匹配项
let g:ycm_cache_omnifunc=0
" 开启 YCM 基于标签引擎
let g:ycm_collect_identifiers_from_tags_files = 1
" 从第2个键入字符就开始罗列匹配项
let g:ycm_min_num_of_chars_for_completion=2
" 在注释输入中也能补全
let g:ycm_complete_in_comments = 1
" 在字符串输入中也能补全
let g:ycm_complete_in_strings = 1
" 注释和字符串中的文字也会被收入补全
let g:ycm_collect_identifiers_from_comments_and_strings = 1

比较特殊的是,这个插件需要编译后才能使用,一般情况下输入以下命令即可

cd ~/.vim/bundle/YouCompleteMe
python3 install.py --clang-completer

如果出现问题,请到github上查看手动安装的说明

reference

[vim的在线中文文档](http://vimcdoc.sourceforge.net/doc/help.html)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值