zoukankan      html  css  js  c++  java
  • Ubuntu系统配置系列4——神级编辑器VIM配置文件.vimrc

    vim成为神级编辑器,虽然本人用的不怎么滴,但是仍然对他爱不释手。我坚信随着时间的积累,我会慢慢掌握它的,下面给大家介绍一下本人简陋的vimrc文件,大神勿喷,小白可拿去用用,见笑了
    #
    1.Ubuntu新的系统没有vim只有vi(这哥俩儿的关系就不废话了),因此在换源之后,首先安装vim sudo apt-get install vim
    #2.编辑.vimrc文件内容,这里用gedit为例
    sudo gedit ~/.vimrc
    #3.编辑内容如下,如果不需要用vim插件的小小萌新,可以只粘贴一下内容,保存退出,重启即可完成;如果需要用插件的朋友点击此处

     
    " ***************** 全局设置 ************** "
    "保持文件上次打开的位置
    if has("autocmd")                                                         
        au BufReadPost * if line("'"") > 1 && line("'"") <= line("$") | exe "normal! g'"" | endif
    endif
    " 开启文件类型侦测
    filetype on
    " 根据侦测到的不同类型加载对应的插件
    filetype plugin on
     
    " 自动缩进
    filetype indent on
     
    " 开启语法高亮功能
    syntax enable
    " 允许用指定语法高亮配色方案替换默认方案
    syntax on
     
    "----------配置----------------
    set history=1000 "设置历史记录
    set nobackup    "取消自动备份,禁止生成临时文件
    set noswapfile
    set nocompatible "关闭兼容模式
    set incsearch "开启实时搜索功能
    set ignorecase "搜索忽略大小写
    set wildmenu "vim命令自动补全
    set autoread "文件自动更新
    set gcr=a:block-blinkon0 "禁止关闭闪烁
    set laststatus=2 "总是显示状态栏
    set ruler "显示光标位置
    set number "显示行号
    set relativenumber "显示相对行号
    set cuc "浅色显示当前行
    set cul "浅色显示当前行
    set showcmd "输入的命令显示出来
    set cmdheight=2 "命令行高度
    set nofoldenable
    set foldmethod=manual "允许手动折叠
    set backspace=2 "回退键生效
    "set backspace=indent,eol,start
    set novisualbell
     
    " 禁止显示滚动条
    set guioptions-=l
    set guioptions-=L
    set guioptions-=r
    set guioptions-=R
     
    " 禁止显示菜单和工具条
    set guioptions-=m
    set guioptions-=T
     
    " 将制表符扩展为空格
    set expandtab
    " 设置编辑时制表符占用空格数
    set tabstop=4
    " 设置格式化时制表符占用空格数
    set shiftwidth=4
    " 让 vim 把连续数量的空格视为一个制表符
    set softtabstop=4
    " 基于缩进或语法进行代码折叠
    set foldmethod=syntax
    " 启动 vim 时关闭折叠代码
    set nofoldenable
    " 交互式打开shell
    set shell=bash -i
     
     
    " *************** 设置全局快捷键 *****************
     
    " 定义快捷键的前缀,即<Leader>
    "let mapleader="<space>"
    let mapleader="'"
     
    " 设置快捷键将选中文本块复制至系统剪贴板
    vnoremap <Leader>y "+y
     
    " 设置快捷键将系统剪贴板内容粘贴至 vim
    nmap <Leader>p "+p
     
    " 定义快捷键关闭当前分割窗口
    nmap <Leader>q :q<CR>
     
    " 定义快捷键保存当前窗口内容
    nmap <Leader>w :w<CR>
     
    " 定义快捷键保存所有窗口内容并退出 vim
    "nmap <Leader>WQ :wa<CR>:q<CR>

    附加内容:vim插件管理

    Vundle是vim的一个插件管理器,相当于Firefox的油猴子一样的重要。

    由于Vundle是托管在GitHub上。Vundle插件官方地址:https://github.com/VundleVim/Vundle.vim。

    因此需要先行下载Git,然后再进行管理。

    #1.下载Git
    sudo apt-get install git
    #2.创建Vundle文件夹
    sudo mkdir ~/.vim/bundle/
    #3.下载Vundle管理器
    sudo git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim
    #4.编辑.vimrc文件
    sudo vim ~/.vimrc
      1 "TNERDTree settings 
      2 " " 打开vim自动打开目录树
      3 "autocmd vimenter * NERDTree
      4 " " 关闭文件后,如果只剩目录树窗口,则直接关闭
      5 autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree")) | q | endif
      6 " " F2键开启/关闭目录树
      7 map <F2> :NERDTreeToggle<cr>
      8 " " 将目录树窗口设置在左边
      9 let g:NERDTreeWinPos="left"
     10 " " 设置目录树窗口宽度为30
     11 let g:NERDTreeWinSize=30
     12 " " 显示目录树窗口行号
     13 let g:NERDTreeShowLineNumbers=1
     14 
     15 
     16 
     17 "--------------------------------------------------
     18 "                     YCM
     19 "--------------------------------------------------
     20 
     21 " 菜单
     22 highlight Pmenu ctermfg=2 ctermbg=3 guifg=#005f87 guibg=#EEE8D5
     23 " 选中项
     24 highlight PmenuSel ctermfg=2 ctermbg=3 guifg=#AFD700 guibg=#106900
     25 let g:ycm_server_python_interpreter='/usr/bin/python'
     26 let g:ycm_global_ycm_extra_conf='~/.vim/.ycm_extra_conf.py'
     27 
     28   " YCM 查找定义
     29 let mapleader=','
     30 nnoremap <leader>gl :YcmCompleter GoToDeclaration<CR>
     31 nnoremap <leader>gf :YcmCompleter GoToDefinition<CR>
     32 nnoremap <leader>gg :YcmCompleter GoToDefinitionElseDeclaration<CR>
     33 let g:ycm_collect_identifiers_from_tags_files = 1
     34 
     35 set completeopt=menu,menuone
     36 let g:ycm_add_preview_to_completeopt = 0  " 关闭函数原型提示
     37 
     38 let g:ycm_show_diagnostics_ui = 0 " 关闭诊断信息
     39 let g:ycm_server_log_level = 'info'
     40 let g:ycm_min_num_identifier_candidate_chars = 2  " 两个字符触发 补全
     41 let g:ycm_collect_identifiers_from_comments_and_strings = 1 " 收集
     42 let g:ycm_complete_in_strings=1
     43 
     44 noremap <c-z> <NOP>
     45 let g:ycm_key_invoke_completion = '<c-z>'   " YCM 里触发语义补全有一个快捷键
     46 let g:ycm_max_num_candidates = 15  " 候选数量
     47 
     48 let g:ycm_semantic_triggers =  {
     49                          'c,cpp,python,java,go,erlang,perl': ['re!w{2}'],
     50                          'cs,lua,javascript': ['re!w{2}'],
     51                          }
     52 
     53 "----------------------------------------
     54 "              ctags: ctags -R
     55 "----------------------------------------
     56 if filereadable("tags")
     57         set tags=tags
     58 endif
     59 
     60 
     61 "------------------------------------------------------
     62 "                       实用设置
     63 "------------------------------------------------------
     64 set nu
     65 
     66 " 为C程序提供自动缩进
     67 set smartindent
     68 
     69 "自动补全
     70 :inoremap ( ()<ESC>i
     71 :inoremap ) <c-r>=ClosePair(')')<CR>
     72 :inoremap { {<CR>}<ESC>O
     73 :inoremap } <c-r>=ClosePair('}')<CR>
     74 :inoremap [ []<ESC>i
     75 :inoremap ] <c-r>=ClosePair(']')<CR>
     76 ":inoremap " ""<ESC>i
     77 ":inoremap ' ''<ESC>i
     78 function! ClosePair(char)
     79         if getline('.')[col('.') - 1] == a:char
     80                 return "<Right>"
     81         else
     82                 return a:char
     83         endif
     84 endfunction
     85 
     86 "--------------------------------------------------------
     87           "新建.c,.h,.sh,.java文件,自动插入文件头
     88 "--------------------------------------------------------
     89 autocmd BufNewFile *.cpp,*.[ch],*.sh,*.java exec ":call SetTitle()"
     90 ""定义函数SetTitle,自动插入文件头
     91 func SetTitle()
     92         "如果文件类型为.sh文件
     93         if &filetype == 'sh'
     94                 call setline(1,"#########################################################################")
     95                 call append(line("."), "# File Name: ".expand("%"))
     96                 call append(line(".")+1, "# Author: velma")
     97                 call append(line(".")+2, "# mail: velmajia@163.com")
     98                 call append(line(".")+3, "# Created Time: ".strftime("%c"))
     99                 call append(line(".")+4, "#########################################################################")
    100                 call append(line(".")+5, "#!/bin/bash")
    101                 call append(line(".")+6, "")
    102         else
    103                 call setline(1, "/*************************************************************************")
    104                 call append(line("."), "      > File Name: ".expand("%"))
    105                 call append(line(".")+1, "      > Author:velma")
    106                 call append(line(".")+2, "      > Mail: velmajia@163.com ")
    107                 call append(line(".")+3, "      > Created Time: ".strftime("%c"))
    108                 call append(line(".")+4, " ************************************************************************/")
    109                 call append(line(".")+5, "")
    110          endif
    111          if &filetype == 'cpp'
    112                  call append(line(".")+6, "#include <iostream>")
    113                  call append(line(".")+7, "using namespace std;")
    114                  call append(line(".")+8, "")
    115          endif
    116          if &filetype == 'c'
    117                  call append(line(".")+6, "#include <stdio.h>")
    118                  call append(line(".")+7, "")
    119          endif
    120          "       if &filetype == 'java'
    121          "               call append(line(".")+6,"public class ".expand("%"))
    122          "               call append(line(".")+7,"")
    123          "       endif
    124          "新建文件后,自动定位到文件末尾
    125  "       autocmd BufNewFile * normal G
    126  endfunc
    127  "新建文件后,自动定位到文件末尾
    128  autocmd BufNewFile * normal G
    129 
    130 
    131 
    132 
    133 set nocompatible              " 这是必需的 
    134 filetype off                  " 这是必需的 
    135 set rtp+=~/.vim/bundle/Vundle.vim
    136 " vundle初始化 
    137 call vundle#begin()
    138 " 让 Vundle 管理 Vundle, 必须
    139 Plugin 'VundleVim/Vundle.vim'
    140 Plugin 'tpope/vim-fugitive'
    141 Plugin 'rstacruz/sparkup', {'rtp': 'vim/'}
    142 Plugin 'ascenator/L9', {'name': 'newL9'}
    143 Plugin 'scrooloose/nerdtree'
    144 Plugin 'Valloric/YouCompleteMe'
    145 
    146 call vundle#end()            " 这是必需的 
    147 filetype plugin indent on    " 这是必需的 
    148 
    149 
    150 
    151 let g:ycm_server_python_interpreter='/usr/bin/python'
    152 let g:ycm_global_ycm_extra_conf='~/.vim/.ycm_extra_conf.py'
    153 
    154 
    155 
    156 
    157 
    158 
    159 
    160 " ***************** 全局设置 ************** "
    161 "保持文件上次打开的位置
    162 if has("autocmd")                                                          
    163     au BufReadPost * if line("'"") > 1 && line("'"") <= line("$") | exe "normal! g'"" | endif 
    164 endif 
    165 " 开启文件类型侦测
    166 filetype on
    167 " 根据侦测到的不同类型加载对应的插件
    168 filetype plugin on
    169 
    170 " 自动缩进
    171 filetype indent on
    172 
    173 " 开启语法高亮功能
    174 syntax enable
    175 " 允许用指定语法高亮配色方案替换默认方案
    176 syntax on
    177 
    178 "----------配置----------------
    179 set history=1000 "设置历史记录
    180 set nobackup    "取消自动备份,禁止生成临时文件
    181 set noswapfile 
    182 set nocompatible "关闭兼容模式
    183 set incsearch "开启实时搜索功能
    184 set ignorecase "搜索忽略大小写
    185 set wildmenu "vim命令自动补全
    186 set autoread "文件自动更新
    187 set gcr=a:block-blinkon0 "禁止关闭闪烁
    188 set laststatus=2 "总是显示状态栏
    189 set ruler "显示光标位置
    190 set number "显示行号
    191 set relativenumber "显示相对行号
    192 set cuc "浅色显示当前行
    193 set cul "浅色显示当前行
    194 set showcmd "输入的命令显示出来
    195 set cmdheight=2 "命令行高度
    196 set nofoldenable
    197 set foldmethod=manual "允许手动折叠
    198 set backspace=2 "回退键生效
    199 "set backspace=indent,eol,start
    200 set novisualbell
    201 
    202 " 禁止显示滚动条
    203 set guioptions-=l
    204 set guioptions-=L
    205 set guioptions-=r
    206 set guioptions-=R
    207 
    208 " 禁止显示菜单和工具条
    209 set guioptions-=m
    210 set guioptions-=T
    211 
    212 " 将制表符扩展为空格
    213 set expandtab
    214 " 设置编辑时制表符占用空格数
    215 set tabstop=4
    216 " 设置格式化时制表符占用空格数
    217 set shiftwidth=4
    218 " 让 vim 把连续数量的空格视为一个制表符
    219 set softtabstop=4
    220 " 基于缩进或语法进行代码折叠
    221 set foldmethod=syntax
    222 " 启动 vim 时关闭折叠代码
    223 set nofoldenable
    224 " 交互式打开shell
    225 set shell=bash -i
    226 
    227 
    228 " *************** 设置全局快捷键 *****************
    229 
    230 " 定义快捷键的前缀,即<Leader>
    231 "let mapleader="<space>"
    232 let mapleader="'"
    233 
    234 " 设置快捷键将选中文本块复制至系统剪贴板
    235 vnoremap <Leader>y "+y
    236 
    237 " 设置快捷键将系统剪贴板内容粘贴至 vim
    238 nmap <Leader>p "+p
    239 
    240 " 定义快捷键关闭当前分割窗口
    241 nmap <Leader>q :q<CR>
    242 
    243 " 定义快捷键保存当前窗口内容
    244 nmap <Leader>w :w<CR>
    245 
    246 " 定义快捷键保存所有窗口内容并退出 vim
    247 "nmap <Leader>WQ :wa<CR>:q<CR>
    248 
    249 " 不做任何保存,直接退出 vim
    #5.更改.vimrc文件内容如下
    #6.安装.vimrc文件写入的插件:进入vim编辑器,在命令模式下输入:PluginInstall,即可自动安装插件,此过程大概半小时能完成,也可能时间会更长一点,取决于您的网速。
      由于YCM(C/C++的自动补全插件)比较任性,会在安装时出错,此时不用理会,之后本人会在后续的更新中,贴出YCM插件的详细安装过程
    :PluginInstall

    安装完成后,会有提示,显示done。

    测试是否完成安装:

      进入vim中按下F2,出现目录树,即安装成功。如果不出现目录树,尝试重启电脑,重启和关机在之前的文章中有过了介绍,就不再赘述了。

  • 相关阅读:
    js 设计模式
    jquery 概述
    Node.js最新Web技术栈(2015年5月)
    this
    gulp
    bootstrap modal
    jsTree问题
    iterm2 学习笔记
    knowledge_map 修改笔记
    handsontable 问题
  • 原文地址:https://www.cnblogs.com/weimin1314/p/12558115.html
Copyright © 2011-2022 走看看