Vim基础配置

来源:互联网 发布:韩版note8网络制式 编辑:程序博客网 时间:2024/06/06 19:03

UNIX like系统下用得比较多的编辑器主要是vimemacs,分别有“编辑器之神”和“神的编辑器”的美誉,emacs比较庞大,扩展性强,有人说它是“伪装成编辑器的操作系统”,而vim则是轻量级的编辑器,对于日常的开发维护非常方便,因此接下来要说的也主要是如何将vim打造成一个轻量级的IDE。

安装vim

首先,需要安装vim和gvim(vim的GUI版),我的系统是Debian,如果你的是其他Linux发行版的系统的话,包名可能会不一样要做适当更改,在终端执行($表示普通用户,#表示超级用户)

$ sudo apt-get install vim vim-gtk

基本配置

安装完成以后,首次打开gvim时,你可能觉得它异常简陋,连行号都不能显示出来,因此需要做些必要的修改使它更好用一些,这个可以通过修改/etc/vim/vimrc(在不同的Linux发行版上全局vimrc的位置也不一样,比如OpenSUSE的在/etc/vimrc)这个文件来实现(需要root权限),以下是我的配置

"vimrc文件修改之后自动加载, Unixautocmd! bufwritepost .vimrc source %"退出Vim后vimrc自动生效,Windows"autocmd! bufwritepost _vimrc source %"设置backspace行为set backspace=indent,eol,start "显示行号set number"显示标尺set ruler"关闭自动备份set nobackup"set noswapfile"开启语法高亮syntax enable syntax on"关闭兼容模式set nocompatible"设置命令行模式下的最大历史记录数set history=200"设置以unix的格式保存文件set fileformat=unix    "高亮当前行set cursorline"高亮当前列"set cursorcolumn"始终显示状态栏set laststatus=2"设置tab键空4格set tabstop=4"将Tab自动转化成空格(需要输入真正的Tab键时,使用<C-V>+Tab)set expandtab"退格键一次删掉4个空格set smarttab"实时搜索set incsearch"高亮搜索结果set hlsearch"忽略大小写set ignorecase"有一个或以上大写字母时仍大小写敏感set smartcase"打开正则表达式set magic"显示匹配的括号set showmatch"显示当前所处模式set showmode"设置右下角显示当前光标位置set showcmd"设置主题为desertExcolorscheme desertExset t_Co=256set background=dark"禁止自动折行set nowrap"设置当文件被改动时自动载入set autoread"设置退出插入模式后自动保存set autowrite"允许插件  filetype plugin on"共享剪贴板  set clipboard+=unnamed"关闭输入错误的提示声音set noerrorbellsset novisualbellset t_vb=set tm=500"禁止光标闪烁"set gcr=a:block-blinkon0"在处理未保存或只读文件的时候,弹出确认set confirm"上下移动光标时光标上方和下方至少保留两行set scrolloff=2"开启自动缩进,智能缩进set autoindentset cindentset smartindentset shiftwidth=4"为特定文件类型载入相关缩进文件filetype indent on"设置默认文件编码为utf-8set fenc=utf-8"设置字体为Monaco,Unixset guifont=Monaco\ 10"设置默认字体Noto Mono,Windows"set guifont=Noto\ Mono:h10"自动判断编码时,依次尝试以下编码set fileencodings=utf8,ucs-bom,gbk,cp936,gb2312,gb18030"设置默认窗口大小set lines=36 columns=84"自动检测文件类型filetype plugin indent on"设置显示消息的列数set cmdheight=2"隐藏工具栏set guioptions-=T"Ctrl+T新建标签页nnoremap <C-t>     :tabnew<CR>inoremap <C-t> <Esc>:tabnew<CR>"修改分屏移动快捷键map <C-j> <C-W>jmap <C-k> <C-W>kmap <C-h> <C-W>hmap <C-l> <C-W>l"修改leader键为空格键let mapleader = "\<space>"let g:mapleader = "\<space>""设置插入模式和可视模式下的退出键inoremap jj <Esc>:w<cr>vnoremap jj <Esc>"全选map <Leader>a ggVG"全选并复制到系统剪贴板nmap <leader>aw <esc>ggVG"+y<esc>"Y复制到行尾nnoremap Y y$"设置快捷键关闭当前buffernnoremap <leader>q :bd<CR> "设置<C-s>保存文件inoremap <C-s> <esc>:w<cr>A"关闭QuickFix窗口nnoremap <leader>c :cclose<bar>lclose<cr>"一键替换全部Tab为空格nmap <leader>ct <esc>:retab<cr>"设置状态栏显示的内容set statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [POS=%l,%v][%p%%]\ %{strftime(\"%d/%m/%y\ -\ %H:%M\")}\ %{ALEGetStatusLine()}"F2可打印字符显示开关nnoremap <F2> :set list! list?<CR>"F4行号显示开关nmap <F4> :set number! number?<CR>"C,C++,python,java,shell按F9编译运行map <F9> :call CompileRun()<CR>func! CompileRun()    exec "w"    if &filetype == 'c'        exec "!gcc % -o %<"        exec "! ./%<"    elseif &filetype == 'cpp'        exec "!g++ % -o %<"        exec "! ./%<"    elseif &filetype == 'go'        exec "!time go run %"    elseif &filetype == 'java'         exec "!javac %"         exec "!java %<"    elseif &filetype == 'python'        exec "!time python3 %"    elseif &filetype == 'sh'        :!./%    endifendfunc"F8进行C,C++的调试map <F8> :call Rungdb()<CR>func! Rungdb()    exec "w"    exec "!g++ % -g -o %<"    exec "!gdb ./%<"endfunc"自动插入文件头autocmd BufNewFile *.cpp,*.cc,*.c,*.hpp,*.h,*.sh,*.py exec ":call SetTitle()" func SetTitle()     if expand("%:e") == 'sh'        call setline(1,"\#!/bin/bash")         call append(line("."), "")     elseif expand("%:e") == 'py'        call setline(1,"#!/usr/bin/env python")        call append(line("."),"# coding=utf-8")        call append(line(".")+1, "")     elseif expand("%:e") == 'cpp'        call setline(1,"#include <iostream>")         call append(line("."), "")     elseif expand("%:e") == 'cc'        call setline(1,"#include <iostream>")         call append(line("."), "")     elseif expand("%:e") == 'c'        call setline(1,"#include <stdio.h>")         call append(line("."), "")     elseif expand("%:e") == 'h'        call setline(1, "#pragma once")    elseif expand("%:e") == 'hpp'        call setline(1, "#pragma once")    endifendfunc autocmd BufNewFile * normal G"F12放大字体,Shift+F12缩小字体if has("unix")    function! FontSizePlus ()      let l:gf_size_whole = matchstr(&guifont, '\( \)\@<=\d\+$')      let l:gf_size_whole = l:gf_size_whole + 1      let l:new_font_size = ' '.l:gf_size_whole      let &guifont = substitute(&guifont, ' \d\+$', l:new_font_size, '')    endfunction    function! FontSizeMinus ()      let l:gf_size_whole = matchstr(&guifont, '\( \)\@<=\d\+$')      let l:gf_size_whole = l:gf_size_whole - 1      let l:new_font_size = ' '.l:gf_size_whole      let &guifont = substitute(&guifont, ' \d\+$', l:new_font_size, '')    endfunctionelse    function! FontSizePlus ()      let l:gf_size_whole = matchstr(&guifont, '\(:h\)\@<=\d\+$')      let l:gf_size_whole = l:gf_size_whole + 1      let l:new_font_size = ':h'.l:gf_size_whole      let &guifont = substitute(&guifont, ':h\d\+$', l:new_font_size, '')    endfunction    function! FontSizeMinus ()      let l:gf_size_whole = matchstr(&guifont, '\(:h\)\@<=\d\+$')      let l:gf_size_whole = l:gf_size_whole - 1      let l:new_font_size = ':h'.l:gf_size_whole      let &guifont = substitute(&guifont, ':h\d\+$', l:new_font_size, '')    endfunctionendifif has("gui_running")    nmap <S-F12> :call FontSizeMinus()<CR>    nmap <F12> :call FontSizePlus()<CR>endif

安装主题

基本配置完成以后,接下来可以进行适当的美化,选一个好看的主题,毕竟“颜值也是生产力啊”,我个人觉得比较不错的主题有desertEx,evening和Papercolor,下载了这些.vim格式的主题文件以后将其移动到用户主目录下(~),然后在终端依次执行

$ cd /etc/vim$ sudo mkdir colors$ sudo cp /home/username(替换为你的用户名)/*.vim colors

最后在/etc/vim/vimrc中写入

"设置主题为desertExcolorscheme desertExset t_Co=256set background=dark

安装插件

vim虽然扩展性不如emacs,但也有不少插件使得你可以更方便的编码,首先你需要安装一个插件管理器方便你管理vim的插件,常见的有Vundle、vim-plug和pathogen,Linux下推荐使用Vundle,执行下面的指令进行安装,注意不要在root权限下执行这一句,因为那样做的话你安装的插件只有在你以root身份运行vim时才会被加载

$ git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim

然后在~目录下创建.vimrc文件

$ vim ~/.vimrc

并写入以下内容

"be iMproved, requiredset nocompatible"required              filetype off                  "set the runtime path to include Vundle and initializeset rtp+=~/.vim/bundle/Vundle.vim"keep Plugin commands between vundle#begin/end.call vundle#begin()"plugins"let Vundle manage Vundle, requiredPlugin 'VundleVim/Vundle.vim'Plugin 'suan/vim-instant-markdown'Plugin 'w0rp/ale'Plugin 'nvie/vim-flake8'Plugin 'tpope/vim-fugitive'Plugin 'tpope/vim-surround'Plugin 'tpope/vim-commentary'Plugin 'tpope/vim-repeat'Plugin 'Chiel92/vim-autoformat'Plugin 'elzr/vim-json'Plugin 'scrooloose/nerdtree'Plugin 'kshenoy/vim-signature'Plugin 'majutsushi/tagbar'Plugin 'jiangmiao/auto-pairs'Plugin 'ap/vim-css-color'Plugin 'luochen1990/rainbow'Plugin 'sheerun/vim-polyglot'Plugin 'octol/vim-cpp-enhanced-highlight'Plugin 'thaerkh/vim-workspace'Plugin 'Yggdroot/indentLine'Plugin 'godlygeek/tabular'Plugin 'tyru/open-browser.vim'Plugin 'vim-airline/vim-airline'Plugin 'ryanoasis/vim-devicons'Plugin 'ctrlpvim/ctrlp.vim'Plugin 'keith/investigate.vim'Plugin 'honza/vim-snippets'Plugin 'SirVer/ultisnips'Plugin 'Valloric/YouCompleteMe'"Plugin 'google/vim-codefmt'"Plugin 'easymotion/vim-easymotion'"Plugin 'scrooloose/syntastic'"Plugin 'tpope/vim-endwise'"Plugin 'mattn/emmet-vim'"Plugin 'sjl/gundo.vim'"Plugin 'lervag/vimtex'"Plugin 'mzlogin/vim-markdown-toc'"Plugin 'mhinz/vim-startify'"Plugin 'scrooloose/nerdcommenter'"Plugin 'nathanaelkane/vim-indent-guides'"Plugin 'junegunn/vim-easy-align'"color scheme"Plugin 'flazz/vim-colorschemes'"all of your Plugins must be added before the following linecall vundle#end()  "required          filetype plugin indent on    "To ignore plugin indent changes, instead use:"filetype plugin on"Brief help":PluginList       - lists configured plugins":PluginInstall    - installs plugins; append `!` to update or just :PluginUpdate":PluginSearch foo - searches for foo; append `!` to refresh local cache":PluginClean      - confirms removal of unused plugins; append `!` to auto-approve removal"see :h vundle for more details or wiki for FAQ"Put your non-Plugin stuff after this line

保存退出后,重新打开vim,并在普通模式下输入

:PluginInstall

网上有些说是:BundleInstall进行安装,这个是老版的,现在安装的Vundle都是用:PluginInstall安装插件的,下面简单介绍下各插件的功能
- vim-instant-markdown,markdown实时预览
- ale,实时语法检查,Vim 8.0以上版本推荐
- syntastic,语法检查,vim 8.0以下版本推荐
- vim-flake8,python语法检查和风格检查
- vim-fugitive,Git插件
- vim-surround,更改成对的符号
- vim-commentary,代码注释插件
- repeat.vim,.范式增强
- vim-autoformat,自动化格式代码
- vim-json,JSON插件
- vim-css-color,高亮显示CSS中的颜色
- The NERD tree,文件浏览
- The NERD Commenter,代码注释
- vim-signature,显示文件内部标记
- tagbar,tags浏览
- auto-pairs,自动补全成对的符号
- vim-cpp-enhanced-highlight,增强的C++语法高亮
- vim-workspace,项目管理和文件自动保存
- indentLine,缩进提示
- rainbow,括号美化
- vim-polyglot,语法高亮包
- investigate.vim,在线查找文档
- vim-easy-align,格式化工具
- vim-airline,状态栏美化
- vim-devicons,图标美化
- ctrlp,模糊搜索
- YouCompleteMe,智能补全
- UltiSnips,代码片段
- gundo,文件时光机
- open-browser,在Vim中访问链接
- startify,启动页面美化

0 0
原创粉丝点击