admin

Linux学习笔记(9)    ——vim的配置
学习linux就不可不提及vim,作为linux下与emacs齐名的神之编辑器,尽管已经有数十年历史了,依旧备受追...
扫描右侧二维码阅读全文
28
2018/06

Linux学习笔记(9)    ——vim的配置

学习linux就不可不提及vim,作为linux下与emacs齐名的神之编辑器,尽管已经有数十年历史了,依旧备受追捧。

vim的强大首先就在于它强大的可扩展性以及与开源文化,现在我就和大家分享一下我自己vim的配置经历。

vim的配置文件是.vimrc, 其中/etc/vim/vimrc是系统整体的vimrc,而用户文件夹~/.vimrc是用户自己的vim环境

vimrc本身就有很多可以配置的属性,这里附上一个链接参考:

https://blog.csdn.net/lhy2932226314/article/details/69668891

(里面的set ruler、set nu等等都是原本存在的选项,无需安装第三方软件的)

但是除此之外,vimrc默认的选项主要都是针对外观显示的,如果想实现一些比较强大、系统的功能,比如代码补齐、语法检查等,就需要安装插件啦!

我配置插件采用的是YCM/vundle,vundle是一个vim的扩展管理工具,有点类似于python的pip吧

安装vundle:

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

此时在主目录下就会产生一个.vim隐藏目录 .vim/bundle下就是插件安装的地址了!

然后touch ~/.vimrc 并把以下内容复制进去,搭好做配置文件的基本框架

set nocompatible              " required
filetype off                  " required

" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()

" alternatively, pass a path where Vundle should install plugins
"call vundle#begin('~/some/path/here')

" let Vundle manage Vundle, required
Plugin 'gmarik/Vundle.vim'

" Add all your plugins here (note older versions of Vundle used Bundle instead of Plugin)
" All of your Plugins must be added before the following line
call vundle#end()            " required
filetype plugin indent on    " required

然后我们就可以来安装插件了,大致的方法是在vimrc中的指定区域(根据注释的提示)用Plugin " " (引号内是插件名)保存退出,重新打开后进入命令模式,输入PluginInstall,回车就能实现插件的安装。值得一提的是原先的插件安装用的是BundleInstall,这样的插件把上述的Plugin改成Bundle就可以了!

关于几个推荐的插件信息详细的可以参考链接

https://blog.csdn.net/turtleo/article/details/50768106

我大概介绍一下我下的几个插件,如下图

nerdtree和tagbar搭配使用,效果如文末图

nerdtree插件可以列出目录结构,tagbar则是列出程序内部的结构,如变量、函数等

ctrl+ww可以实现不同框的切换,至于快捷键可以参考文末的配置

tagbar近年逐步取代了taglist,但是由于linux原先的ctags不支持,需要如下命令

sudo apt-get install exuberant-ctags

然后我再把我原来用taglist的代码注释掉(用taglist的朋友也可以大概看看这几个被注释掉的属性,作用都在名称中表达清楚了)

systastic:代码检查插件,文件编辑完成后:w就可以显示出检查的效果,当然稍后提到的YouCompleteMe插件也实现了相应的代码检查功能

YouCompleteMe 这个插件主要的功能是代码补齐,基本能达到IDE的级别,同时也实现了代码检查的功能,它相当于是一些基本组件的集合,类似于针对python开发的jedi(实际上它也可以加入C、java、go等多种语言的支持)

安装YouCompleteMe我走了不少弯路,详细信息参考官网文档:

https://github.com/Valloric/YouCompleteMe#full-installation-guide

大概的意思就是如果不需要加入c的支持,直接进入vundle的对应目录,如下图,然后

./install.sh安装,如果安装结束后vim file.py 发现没有报错,那么恭喜,安装成功!(这里一般是不会报错的,报错一般是加入了其它支持)

如果需要加入c等语言支持,就比较麻烦了,首先要在官网上下载clang

你会发现官网上只有对应的tar.xz.sig文件,这个sig是数字签名,用以检查的,需要用gpg 根据官网上提供的密钥来处理,再解压,这一步的操作有兴趣的朋友可以参考

https://www.cnblogs.com/daemon369/p/3204020.html

之后参考YouCompleteMe官方文档去安装(需要用到cmake、makefile等等),除此之外,它发挥代码补齐的配置文件是在上面那张图倒数第二个ls列出的cpp中的一个.ycm_extra_conf.py文件,修改这个可以加入自定义的代码

我的vimrc配置源代码

set nocompatible              " required                                                                                                                                                                            
filetype off                  " required

"set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()

" alternatively, pass a path where Vundle should install plugins
"call vundle#begin('~/some/path/here')

" let Vundle manage Vundle, required
Plugin 'gmarik/Vundle.vim'

" Add all your plugins here (note older versions of Vundle used Bundle instead of Plugin)
" All of your Plugins must be added before the following line

Plugin 'vim-scripts/indentpython.vim'
Bundle 'Valloric/YouCompleteMe'
Plugin 'scrooloose/syntastic'
Plugin 'nvie/vim-flake8'
Plugin 'jnurmine/Zenburn'
Plugin 'scrooloose/nerdtree'
map <F7> :NERDTreeToggle<CR>
Plugin 'TagBar'
Plugin 'altercation/vim-colors-solarized'
"this will pair the quoatation mark automatically
Bundle 'Raimondi/delimitMate'
"Bundle 'taglist.vim'
"let Tlist_Auto_Open = 1
"let Tlist_AUto_Update = 1
"let Tlist_Use_SingleClick=1
"let Tlist_Show_One_File = 0
"let Tlist_Use_Right_Window = 1
"let Tlist_Exit_OnlyWindow = 1
"let Tlist_Ctags_Cmd = '/usr/bin/ctags'

"for ycm
let g:ycm_error_symbol = '>>'
let g:ycm_warning_symbol = '>*' 
let mapleader = '\'
"mapleader is the prefix we must add when using the usual mode
nnoremap <leader>gl :YcmCompleter GoToDeclaration<CR>
nnoremap <leader>gf :YcmCompleter GoToDefinition<CR>
nnoremap <leader>gg :YcmCompleter GoToDefinitionElseDeclaration<CR>
nmap <F4> :YcmDiags<CR>
nmap <F5> :call RunPython()<CR>
nmap <F3> :tabnew<CR>
nmap <C-F3> \be

"for Tagbar
nmap <silent> <F8> : TagbarToggle<CR>

winpos 5 5
set lines=40 columns=130
colorscheme murphy

set showcmd
set foldenable
set foldmethod=manual
set laststatus=1
set nocompatible      "avoid the bugs of vi 
set autowrite
set magic
set ruler
set cursorline
set encoding=utf-8
set guifont=Courier_New:h10:cANSI
"disable the navigaition bar and menu
set guioptions-=m
set guioptions-=T
set matchtime=1
"when cursor is at the top of the buffer, it will keep 3 lines from the bottom
set scrolloff=3
set report=0
"save the global variable
"set viminfo+=1
"set wildmenu
"set fillchars=vert:\,stl:\,stlnc:545
if version >= 603 
        set helplang=cn
        set encoding=utf-8
endif

call vundle#end()            " required
filetype plugin indent on    " required

"let Tlist_Auto_Open = 1
"let Tlist_AUto_Update = 1
"let Tlist_Use_SingleClick=1
"let Tlist_Show_One_File = 0
"let Tlist_Use_Right_Window = 1
"let Tlist_Exit_OnlyWindow = 1
"let Tlist_Ctags_Cmd = '/usr/bin/ctags'
autocmd BufNewFile *py exec ":call SetPythonTitle()"
autocmd BufNewFile *.sh exec "call SetTitle()"

func SetPythonTitle()
        call setline(1,"#!/usr/bin/env python")
        call append(line("."),"#-*-coding:utf-8-*-")
        call append(line(".")+1," ")
        call append(line(".")+2, "\# File Name: ".expand("%"))
        call append(line(".")+3, "\# Author: Wang Junjie") 
        call append(line(".")+4, "\# Created Time: ".strftime("%Y-%m-%d",localtime()))
endfunc 

func SetTitle()
        call setline(1,"#!/bin/bash")
        call setline(2,"#       Program:")
        call setline(3,"#This program functions as")
        call append(line(".")+3, "\#Created Time: ".strftime("%Y-%m-%d",localtime()))
endfunc

function RunPython() 
         let file_name = expand("%:p")
         let file_ext = expand("%:e")
         let file_cmd = ""
         if file_ext == "py"
              let file_cmd = '/usr/bin/python'
              let file_args = ' ' . file_name
         endif   
         if file_cmd != ""
             if ! executable(file_cmd)
                  echo file_cmd
                  echo "The executable file to compile ". file_ext . " type files."
             else
                 let cmd = "! ". file_cmd . ' ' . file_args
                 echo "执行命令: ". cmd 
                 exec cmd 
             endif                                                                                                                                                                                                  
        endif
endfunc

主要参考了链接

http://www.mamicode.com/info-detail-873094.html

值得一体的是murphy这个主题,我觉得挺好的

通过call setTitle这种定义函数的方法为每个文件加相同的头也是一大亮点

其中nmap是设置键盘快捷键的语法,还有leader则是前缀

配置好后效果大概如下

 

Last modification:March 13th, 2019 at 07:06 pm
If you think my article is useful to you, please feel free to appreciate

Leave a Comment