Mac 下 vim 环境配置及插件设置

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wr339988/article/details/80556558

Mac 下 vim 环境配置及插件设置

mac系统vim是(个人认为)最方便的代码编辑工具了,但是需要一定精力去配置好。这里备份一下自己觉得不错的配置。

安装MacVim来替代系统自带vim

一般情况下,Mac OS X 自带的 vim 是不能满足需求的,所以大都选择安装MacVim。可以直接通过brew安装,如果没有安装brew,先自行百度安装brew。

brew install macvim

然后覆盖掉系统自带的vim,在~/.bash_profile中添加以下命令。

alias vi=vim
alias vim=mvim
alias mvim='/usr/local/bin/mvim -v'

然后刷新配置文件

source ~/.bash_profile

设置自动添加头文件

例如我们编写Python脚本的时候经常会在文件开头添加执行文件的Python路径以及文件的编码方式,我们可以通过在Vim的配置文件~/.vimrc中添加一个函数,并让他在打开一个新的缓冲区的时候自动添加到头部。

" Auto add head info
" .py file into add header
function HeaderPython()
    call setline(1, "#!/usr/bin/env python")
    call append(1, "# -*- coding: utf-8 -*-")
    normal G
    normal o
endf
autocmd bufnewfile *.py call HeaderPython()

这样当我们使用

vi new.py

的时候便会匹配到文件后缀并执行头部添加函数进行内容添加, 其他语言的脚本例如bash、perl等都是类似的方式。

安装插件管理器Vundle

Vundle全称是Vim Bundle,可以让我们轻松的安装、更新、搜索和清理Vim插件。Vundle本身是一个Vim插件,所以是我们安装所有插件中最早需要安装的插件。

安装 Vundle

git clone https://github.com/gmarik/vundle.git ~/.vim/bundle/vundle

配置 Vundle

在~/.vimrc中添加以下代码

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

" 在这里添加你想安装的Vim插件

call vundle#end()            " required

目前我使用的插件有:

Bundle 'gmarik/vundle'
" Python补全强力插件
Bundle 'davidhalter/jedi'
" c-family 补全插件
Bundle 'Valloric/YouCompleteMe'
" 添加引号,括号配对补全
Bundle 'jiangmiao/auto-pairs'
" 添加/解除注释
Bundle 'scrooloose/nerdcommenter'

其中YouCompleteMe需要单独配置一下,否则用vim打开文件会有如下报错:

The ycmd server SHUT DOWN (restart with ‘:YcmRestartServer’). YCM core library not detected; you need to compile YCM before using it. Follow the instructions in the documentation.

编译过程需要用到CMake

brew install CMake

带 C-family languages 语义支持的版本

cd ~/.vim/bundle/YouCompleteMe 
./install.sh --clang-completer

最后在.vimrc中配置YCM:

" 自动补全配置
set completeopt=longest,menu "让Vim的补全菜单行为与一般IDE一致(参考VimTip1228)
autocmd InsertLeave * if pumvisible() == 0|pclose|endif "离开插入模式后自动关闭预览窗口
inoremap <expr> <CR> pumvisible() ? "\<C-y>" : "\<CR>" "回车即选中当前项
"上下左右键的行为 会显示其他信息
inoremap <expr> <Down> pumvisible() ? "\<C-n>" : "\<Down>"
inoremap <expr> <Up> pumvisible() ? "\<C-p>" : "\<Up>"
inoremap <expr> <PageDown> pumvisible() ? "\<PageDown>\<C-p>\<C-n>" : "\<PageDown>"
inoremap <expr> <PageUp> pumvisible() ? "\<PageUp>\<C-p>\<C-n>" : "\<PageUp>"

"youcompleteme 默认tab s-tab 和自动补全冲突
"let g:ycm_key_list_select_completion=['<c-n>']
let g:ycm_key_list_select_completion = ['<Down>']
"let g:ycm_key_list_previous_completion=['<c-p>']
let g:ycm_key_list_previous_completion = ['<Up>']
let g:ycm_confirm_extra_conf=0 "关闭加载.ycm_extra_conf.py提示

let g:ycm_collect_identifiers_from_tags_files=1 " 开启 YCM 基于标签引擎
let g:ycm_min_num_of_chars_for_completion=2 " 从第2个键入字符就开始罗列匹配项
let g:ycm_cache_omnifunc=0 " 禁止缓存匹配项,每次都重新生成匹配项
let g:ycm_seed_identifiers_with_syntax=1 " 语法关键字补全
nnoremap <F5> :YcmForceCompileAndDiagnostics<CR> "force recomile with syntastic
"nnoremap <leader>lo :lopen<CR> "open locationlist
"nnoremap <leader>lc :lclose<CR> "close locationlist
inoremap <leader><leader> <C-x><C-o>
"在注释输入中也能补全
let g:ycm_complete_in_comments = 1
"在字符串输入中也能补全
let g:ycm_complete_in_strings = 1
"注释和字符串中的文字也会被收入补全
let g:ycm_collect_identifiers_from_comments_and_strings = 0

nnoremap <leader>jd :YcmCompleter GoToDefinitionElseDeclaration<CR> " 跳转到定义处

Vundle 命令

在.vimrc中配置好想安装的插件后,可以在vim命令行中可以直接执行以下命令。

# 安装插件
:BundleInstall
# 更新插件
:BundleUpdate
# 清除不需要的插件
:BundleClean
# 列出当前的插件
:BundleList
# 搜索插件
:BundleSearch

配置Vim

通过更改.vimrc来设置行号、高亮、主题等。目前我的配置是:

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 一般设定
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 设定默认解码
set fenc=utf-8
set fencs=utf-8,usc-bom,euc-jp,gb18030,gbk,gb2312,cp936

"去掉讨厌的有关vi一致性模式,避免以前版本的一些bug和局限
set nocompatible

" 显示中文帮助
if version >= 603
    set helplang=cn
    set encoding=utf-8
endif

" 语法高亮
syntax on

" 设置配色
colorscheme solarized  "可能需要提前下载

" 设置字体
set guifont=Monaco:h12

" 设置gvim启动窗口的位置,以及大小
" winpos 300 105
" set lines=30 columns=100

" 开启行号显示
set number

"下面两行在进行编写代码时,在格式对起上很有用;
"第一行,vim使用自动对起,也就是把当前行的对起格式应用到下一行;
"第二行,依据上面的对起格式,智能的选择对起方式,对于类似C语言编
"写上很有用
set autoindent
set smartindent

"查询时非常方便,如要查找book单词,当输入到/b时,会自动找到第一
"个b开头的单词,当输入到/bo时,会自动找到第一个bo开头的单词,依
"次类推,进行查找时,使用此设置会快速找到答案,当你找要匹配的单词
"时,别忘记回车
set incsearch

" 高亮当前行
set cursorline

" 启动的时候不显示那个援助索马里儿童的提示
set shortmess=atI

" 我的状态行显示的内容(包括文件类型和解码)
set statusline=%F%m%r%h%w\[POS=%l,%v][%p%%]\%{strftime(\"%d/%m/%y\ -\ %H:%M\")}

" 总是显示状态行
set laststatus=2

" 制表符为4
set tabstop=4

" 统一缩进为4
set softtabstop=4
set shiftwidth=4

" 在c,c++,python文件中用空格代替制表符
autocmd FileType c,cpp,python set shiftwidth=4 | set expandtab

" 侦测文件类型
filetype on

" 载入文件类型插件
filetype plugin on

" 为特定文件类型载入相关缩进文件
filetype indent on

    " 如果文件类型为.sh文件
    if &filetype == 'sh'
        call setline(1,
        "\#########################################################################")
        call append(line("."), "\# File Name: ".expand("%"))
        call append(line(".")+1, "\# Author: Hat_Cloud")
        call append(line(".")+2, "\# mail: jijianfeng529@gmail.com")
        call append(line(".")+3, "\# Created Time: ".strftime("%F %R"))
        call append(line(".")+4, "\#########################################################################")
        call append(line(".")+5, "\#!/bin/bash")
        call append(line(".")+6, "")

    else
        call setline(1, "/*************************************************************************")
        call append(line("."), "    > File Name: ".expand("%"))
        call append(line(".")+1, "    > Author: Hat_Cloud")
        call append(line(".")+2, "    > Mail: jijianfeng529@gmail.com ")
        call append(line(".")+3, "    > Created Time: ".strftime("%F %R"))
        call append(line(".")+4, " ************************************************************************/")
        call append(line(".")+5, "")
    endif
    if &filetype == 'python'
        call append(line(".")+5, "\#!/usr/bin/env python")
        call append(line(".")+6, "\#coding: utf-8")
        call append(line(".")+7, "")
    endif
    if &filetype == 'cpp'
        call append(line(".")+6, "#include<iostream>")
        call append(line(".")+7, "using namespace std;")
        call append(line(".")+8, "")
    endif
    if &filetype == 'c'
        call append(line(".")+6, "#include<stdio.h>")
        call append(line(".")+7, "")
    endif
    " 新建文件后,自动定位到文件末尾
    autocmd BufNewFile * normal G
endfunc

猜你喜欢

转载自blog.csdn.net/wr339988/article/details/80556558
今日推荐