• 自定义vim配置文件vimrc,用于c/c++编程


      vim作为Linux下广受赞誉的代码编辑器,其独特的纯命令行操作模式可以很大程度上方便编程工作,通过自定义vim配置文件可以实现对vim功能的个性化设置。

      vim配置文件一般有两份,属于root的/etc/vim/vimrc和属于当前用户的~/.vimrc,两者都可以配置vim,而当两者配置信息有冲突时,以后者为准。

      我的/etc/vim/vimrc文件内容如下:

    runtime! debian.vim
    
    syntax on
    
    set showmatch
    
    set nu
    
    set autoindent
    
    set cindent
    
    set mouse=a
    
    if filereadable("etc/vim/vimrc.local")
        source /etc/vim/vimrc.local
    endif

      我的当前用户vim配置文件~/.vimrc内容如下:

    inoremap ' ''<ESC>i
    inoremap " ""<ESC>i
    inoremap ( ()<ESC>i
    inoremap [ []<ESC>i
    inoremap { {<CR>}<ESC>O
    "设置跳出自动补全的括号
    func SkipPair()  
        if getline('.')[col('.') - 1] == ')' || getline('.')[col('.') - 1] == ']' || getline('.')[col('.') - 1] == '"' || getline('.')[col('.') - 1] == "'" || getline('.')[col('.') - 1] == '}'  
                return "<ESC>la"  
        else  
            return "	"  
        endif  
    endfunc  
    " 将tab键绑定为跳出括号  
    inoremap <TAB> <c-r>=SkipPair()<CR>
    
    "打开文件类型检测, 加了这句才可以用智能补全
    set completeopt=longest,menu
    
    set shortmess=atI " 启动的时候不显示那个援助乌干达儿童的提示 
    set showcmd "输出的命令显示出来
    
    autocmd InsertLeave * se nocul " 用浅色高亮当前行
    autocmd InsertEnter * se cul " 用浅色高亮当前行 
    
    set foldenable " 允许折叠
    set foldmethod=manual " 手动折叠 
    
    set nocompatible "去掉讨厌的有关vi一致性模式,避免以前版本的一些bug和局限 
    
    " 映射全选+复制 ctrl+a
    map <C-A> ggVGY
    map! <C-A> <Esc>ggVGY
    map <F12> gg=G
    " 选中状态下 Ctrl+c 复制
    vmap <C-c> "+y
    "去空行
    nnoremap <F2> :g/^/s*$/d<CR> 
    
    "代码补全
    set completeopt=preview,menu 
    
    "共享剪贴板
    set clipboard+=unnamed 
    
    " Tab键的宽度
    set tabstop=4
    " 统一缩进为4
    set softtabstop=4
    set shiftwidth=4
    " 不要用空格代替制表符
    set noexpandtab
    " 在行和段开始处使用制表符
    set smarttab
    
    "禁止生成临时文件
    set nobackup
    set noswapfile
    "搜索忽略大小写
    set ignorecase
    "搜索逐字符高亮
    set hlsearch
    set incsearch
    
    set gdefault "行内替换
    set encoding=utf-8
    set fileencodings=utf-8,ucs-bom,shift-jis,gb18030,gbk,gb2312,cp936,utf-16,big5,euc-jp,latin1 "
    
    "编码设置
    
    set guifont=Menlo:h16:cANSI "设置字体
    set langmenu=zn_CN.UTF-8
    set helplang=cn  "语言设置
    
    set ruler "在编辑过程中,在右下角显示光标位置的状态行
    
    set laststatus=1  "总是显示状态行
    
    set showcmd "在状态行显示目前所执行的命令,未完成的指令片段也会显示出来
    
    set scrolloff=3 "光标移动到buffer的顶部和底部时保持3行的距离"""""""
    
    set autowrite "在切换buffer时自动保存当前文件"
    
    set showmatch
    set selection=exclusive
    set selectmode=mouse,key
    
    set wildmenu  "增强模式中的命令行自动完成操作
    
    set linespace=2 "字符间插入的像素行数目
    set whichwrap=b,s,<,>,[,] "开启normal 或visual模式下的backspace键空格键,左右方向键,insert或replace模式下的左方向键,右方向键的跳行功能
    
    filetype plugin indent on
    "分为三部分命令:file on,file plugin on,file indent on 分别是自动识别文件类型, 用用文件类型脚本,使用缩进定义文件""]""
    
    filetype on "打开文件类型检测功能
    
    autocmd BufNewFile *.cpp,*.[ch] exec ":call SetTitle()"
    func SetTitle()
        call setline(1,"/************************************************************************")
        call append(line("."), "    > File Name: ".expand("%")) 
        call append(line(".")+1, "    > Author: lsh") 
        call append(line(".")+2, "    > Mail: lsh1999mail@163.com ") 
        call append(line(".")+3, "    > Created Time: ".strftime("%c")) 
        call append(line(".")+4, "************************************************************************/") 
        call append(line(".")+5, "")
        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
    
    "C,C++ 按F5编译运行
    map <F5> :call CompileRunGcc()<CR>
    func! CompileRunGcc()
        exec "w"
        if &filetype == 'c'
            exec "!g++ % -o %<"
            exec "!time ./%<"
        elseif &filetype == 'cpp'
            exec "!g++ % -o %<"
            exec "!time ./%<"
        endif    
    endfunc
    
    "C,C++的调试
    map <F8> :call Rungdb()<CR>
    func! Rungdb()
    exec "w"
    exec "!g++ % -g -o %<"
    exec "!gdb ./%<"
    endfunc
    "
    set tags=/home/lsh/files/tags
    
    let Tlist_Auto_Open = 1
    let Tlist_Ctags_Cmd = '/usr/local/bin/ctags'
    let Tlist_Show_One_File = 1
    let Tlist_Exit_OnlyWindow = 1
    """"""""""""""""""""""""
  • 相关阅读:
    JavaScript要理解闭包先了解词法作用域
    CSS实现放大镜/狙击镜效果
    如何用js让表格的行也能拖动
    如何用Ajax传一个数组数据
    swf自动播放时如何全屏全部显示
    格式化金额数与自动四舍五入
    HTML标签的使用要注意语义化
    一张图理解"Figure", "Axes", "Axis"
    Python的"random"函数的使用(一)
    "sorted()"中的"Key Functions"
  • 原文地址:https://www.cnblogs.com/lsh99k/p/9786234.html
Copyright © 2020-2023  润新知