vim编辑器基础使用及高阶配置

vi,是一款由加州大学伯克利分校,Bill Joy研究开发的文本编辑器,起初用在 Unix Like 系统。而Vim是从 vi 发展出来的一个文本编辑器,在Vi的基础上改进和增加了很多特性,代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。

vim基本使用

1. vim工作四种模式

  1. 普通模式
  2. 插入模式
  3. 可视模式
  4. 命令行模式

2. 中文帮助手册的安装

  1. 在下面的网站下载中文帮助的文件包:
    $ wget https://jaist.dl.sourceforge.net/project/vimcdoc/vimcdoc/vimcdoc-2.1.0.tar.gz

    • 也可以在https://sourceforge.net/projects/vimcdoc/页面下载其他版本
  2. 解包后进入文件夹进行安装
    $ tar zxvf vimcdoc-2.1.0.tar.gz
    $ cd vimcdoc-2.1.0
    $ sudo ./vimcdoc.sh -i
  3. 启动vim,输入:help,看看帮助文档是否已经便成中文了?
  4. 一些注意事项:
    • vim中文文档不会覆盖原英文文档,安装后vim默认使用中文文档。若想使用英文文档,可在vim中执行以下命令:
      set helplang=en
      同理,使用以下命令可重新使用中文文档:
      set helplang=cn
    • 帮助文件的文本是utf-8编码的, 如果想用vim直接查看, 需要在~/.vimrc中设置:
      set encoding=utf-8
    • 不想错过学习英语机会的,卸除使用:
      $ sudo ./vimcdoc.sh -u

3. 多文件编辑

  • 在shell下使用命令
    vim file_1 file_2 …… file_n :打开多个文件
  • 正常模式下使用命令
    :e 文件名在vim中打开新文件
  • 正常模式下使用命令
    :ls :所有打开文件列表
    :bn :到下一个文件
    :bp :到上一个文件
    :b#ctrl-6 :到最近的前一个文件
  • 写入配置文件.vimrc中
    set autowriteall :如果讨厌每次打开新文件,vim喋喋不休的要求你保存,那么可以设置自动保存。

4. 多窗口编辑

  • 正常模式下使用下面命令或快捷键
    :sp 文件名 :横向拆分窗口(多行窗口)。
    :vsp 文件名 :纵向拆分窗口(多列窗口)。
    ctrl_w_h :将光标移动到左一个窗口。
    ctrl_w_j :将光标移动到下一个窗口。
    ctrl_w_k :将光标移动到上一个窗口。
    ctrl_w_l :将光标移动到右一个窗口。
    ctrl_w_+ :当前窗口尺寸变大。
    ctrl_w_- :当前窗口尺寸变小。
    ctrl_w_o :只显示当前窗口。

5. tab键与空格键转化

  1. 对于已保存的文件,TAB替换为空格的方法:
    :set ts=4 
    :set expandtab 
    :%retab!
  2. 对于已保存的文件,空格替换为TAB的方法:
    :set ts=4 
    :set noexpandtab 
    :%retab!

vim插件

1. 插件管理器 — vim-plug

Vim本身并没有提供插件管理功能,在有很多插件的情况下,.vim/vimfile 文件夹下就变得杂乱不堪,管理插件将会很难麻烦;而使用插件管理器则让管理变得方便。
vim插件管理器还是蛮多的,比如vundle、pathogen、neobundle、vim addon manager、vim-plug ,我选择了neobundle(不分好坏,用着顺手就好)

  1. 下载plug.vim并将它安置在~/.vim/autoload目录
    • 必须是放置在~/.vim/autoload目录,其他目录是测试不行
      $ curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
      https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
  2. 插件配置

    • 编辑~/.vimrc,添加vim-plug配置:
    • 以call plug#begin()开头,begin可以接受参数指定存放插件的位置
    • 中间是以Plug开头的插件列表,支持以下功能:
      • 允许任何有效的git URL
      • 可以使用|分隔符在单行中写入多个Plug命令
      • 按需加载
    • 以call plug#end()结尾
    • 我的插件配置
      
      "==================== Plug-in Management ==================
      "
      " set the runtime path to include Vundle and initialize
      set rtp+=~/.vim/autoload/

    " Warning: Make sure you use single quotes
    " Specify a directory for plugins
    call plug#begin('~/.vim/plug-in')

    " 目录树、文件浏览插件:NERD tree
    Plug 'https://github.com/scrooloose/nerdtree.git';

    " 自动补全、错误提示
    "Plug 'Valloric/YouCompleteMe'

    " 状态栏(装逼必备)
    "Plug 'https://github.com/vim-airline/vim-airline.git';

    " 超级搜索
    Plug 'kien/ctrlp.vim'

    " 对齐代码的虚线,写Python尤其需要
    Plug 'Yggdroot/indentLine'

    " Initialize plugin system
    call plug#end()

  3. 安装配置文件中的插件
    重新加载.vimrc并在vim命令行模式执行:PlugInstall安装插件。
    其他命令:

    • PlugInstall [name ...] [#threads]:安装插件
    • PlugUpdate [name ...] [#threads]:安装或更新插件
    • lugClean[!]:删除未使用的目录(bang版本无需提示即可清除)
    • PlugUpgrade:升级vim-plug本身
    • PlugStatus:检查插件的状态vim美化状态栏
    • PlugDiff:检查上次更新和挂起的更改中的更改。
    • PlugSnapshot[!] [output path]:生成用于恢复插件当前快照的脚本

2. 配置目录树(NERD tree插件)

  1. 插件简介
    NERD tree是一款vim树形文件资源管理器插件。NERD tree可以让你在vim中浏览你的文件系统,打开想要的文件或目录。
  2. 插件安装
    NERD tree插件在上述vim-plug中已安装了,对于手动安装这里不做说明。
  3. 插件命令
    • 命令行模式(command mode)
    • :NERDTree :打开新的目录树。可以提供一个路径参数,那么命令将打开以该路径作为根目录的目录树。如果没有路径参数提供,那么当前目录将作为新的目录树的根目录。
    • :NERDTreeToggle : 如果当前标签已经存在目录树,该命令会重新刷新目录树显示;如果当前标签不存在目录树,该命令作用效果与:NERDTree命令一致。
    • :NERDTreeClose : 关闭当前标签的目录树。
    • 为了方便得打开目录树和关闭目录树,我们在~/.vimrc中绑定快捷键,将F2映射到:NERDTreeToggle命令的配置如下,之后我们按下F2就可以方便地开关目录树
      "---------------------- NERD tree插件 ----------------------
      " 绑定F2到NERDTreeToggle
      map <F2> :NERDTreeToggle<CR>
      " 启用鼠标以便更改窗口宽度
      set mouse=a
      1. 插件快捷键
        普通模式(normal mode)下操作
    • 文件节点映射(File node mappings)
    • 左键双击 or 回车 or o : 打开指定文件。
    • go:打开指定文件,将光标留在目录树中。
    • t:在新标签中打开文件。
    • T:在新标签中打开文件,保持鼠标焦点留在当前标签。
    • 鼠标中键 or i:在水平分屏窗口中打开指定文件。
    • gi:在水平分屏窗口中打开指定文件,将光标留在目录树中。
    • s:在垂直分屏窗口中打开指定文件。
    • gs:在垂直分屏窗口中打开指定文件,将光标留在目录树中。
    • 目录节点映射(Directory node mappings)
    • 左键双击 or 回车 or o : 打开指定目录。
    • O:递归打开指定目录。
    • x:关闭当前节点的父节点。
    • X:递归关闭当前节点的所有子节点。
    • 鼠标中键 or e:浏览指定目录。
    • 书签表映射(Bookmark table mappings)
    • 左键双击 or 回车 or o : 打开指定书签。
    • t:在新标签中打开书签。
    • T:在新标签中打开书签,保持鼠标焦点留在当前标签。
    • D:删除指定书签。
    • 树形导航映射(Tree navigation mappings)
    • p:跳转到根节点。
    • P:跳转到当前节点的父节点。
    • K:跳转到当前目录的第一个子节点。
    • J:跳转到当前目录的最后一个子节点。
    • Ctrl + K:跳转到当前节点的上一个兄弟节点。
    • Ctrl + J:跳转到当前节点的下一个兄弟节点。
    • 文件系统映射(Filesystem mappings)
    • C:将当前选择的目录做为树形目录的根节点,即切换当前根目录节点为选择的目录节点。
    • u:将当前视图中的树根节点上移一层目录,即拿当前树根目录的父目录做为新的根目录。
    • U:将当前视图中的树根节点上移一层目录,即拿当前树根目录的父目录做为新的根目录,并且保持原树目录状态不变。
    • r:递归刷新当前目录。
    • R:递归刷新当前节点。
    • m:显示菜单。
    • cd:将CWD切换到当前选择节点的目录。
    • 树形过滤器映射(Tree filtering mappings)
    • I:是否显示隐藏文件开关。
    • f:是否启用文件过滤器开关。
    • F:是否显示文件开关。
    • B:是否显示书签表的开关。
    • 树形过滤器映射(Tree filtering mappings)
    • q:关闭树形目录树窗口。
    • A:缩放树形目录树窗口。
    • ?:显示帮助文档的开关。

3. 状态栏美化

"  ----------------------- 状态栏美化 ----------------------
set laststatus=2  "显示状态栏
set t_Co=256      "在windows中用xshell连接打开vim可以显示色彩

4. 插件推荐

  1. 插件管理器
    • Vundle.vim - 最常用最老牌最简单的Vim插件管理器,缺陷是没法并发执行更新,安装
    • dein.vim - 日本人Shougo 写的,也是neobundle.vim的插件管理器的作者 (neobundle基本不维护了), 对比vim-plug, 此插件速度上要少为逊色一些
    • vim-plug - 韩国人junegunn (Junegunn Choi) 写的, 目前最快插件管理器,无论是更新,安装,全都是并发的,对,是并发的!!!!
  2. 自动补全
    • neocomplete - 日本人Shougo 写的,比较老牌的自动补全插件,综合体验一般般,需要Vim支持Lua
    • 语法错误提示和自动补全:YouCompleteMe (推荐)
  3. 装逼必备
    vim-airline - 各种line已经成为过去,基本 airline 已经实现了统一 ,同时支持各种插件,当然带来的负担就是会导致vim启动慢了一点. 当然如果要用vim装逼的话,这个是必不可少的.

vim配置

vim的配置文件:
 ~/.vimrc    用户的默认配置文件
 ~/.vim/plugin/ 用户的默认脚本文件的存放目录
 ~/.vim/ftplugin/ 用户的默认文件类型相关脚本文件的存放目录

1. 基础配置

  1. 编辑~/.vimrc文件

    "====================== 基础配置 ===========================
    set nocompatible       "去掉vi的一致性
    set backspace=indent,eol,start
    
    "  -------------------- 界面布局 ------------------------
    set showtabline=0       "隐藏顶部标签栏
    set guifont=Monaco:h13  "设置字体
    set background=dark     "设置背景色
    set nowrap              "折行设置(关闭折行)
    set whichwrap+=<,>,h,l  "允许backspace和光标键跨越行边界
    set cmdheight=3         "命令行高度
    
    "隐藏滚动条
    set guioptions-=r
    set guioptions-=L
    set guioptions-=b
    
    "标尺"
    set scrolloff=6         "上下可视行数 
    set ruler               "右下角显示光标位置的状态行
    set cursorline          "突出显示当前行
    set cursorcolumn        "突出显示当前列
    
    "设置行号的颜色和背景(这在设置了colorscheme可能会无效)
    set number                         "显示行号
    if has("gui_running")
        highlight LineNr guifg=red     "gui模式下字体颜色设置
        highlight LineNr guibg=white   "gui模式下背景颜色设置
    else
        highlight LineNr ctermfg=brown "彩色终端下字体颜色设置
        highlight LineNr ctermbg=153   "彩色终端下背景颜色设置
    endif
    
    "  ------------------- 格式化设置 -----------------------
    set fileformat=unix   "设置以unix的格式保存文件
    set showmatch         "高亮显示匹配的括号
    set matchtime=10      "匹配括号高亮的时间(单位是十分之一秒)
    set scrolloff=5       "距离顶部和底部5行
    set laststatus=2      "命令行为两行
    set fenc=utf-8        "文件编码
    set ignorecase        "忽略大小写
    
    "格式化设置之制表符
    set tabstop=4         "设置tab键的宽度
    set shiftwidth=4      "换行时行间交错使用4个空格
    set softtabstop=4
    set smarttab          "开启新行时使用智能 tab 缩进
    set list              "显示Tab符(2行)
    set listchars=tab:\|\ ,trail:.,extends:>,precedes:<  
    
    " 缩进
    "set autoindent        "设置自动缩进(即每行的缩进值与上一行相等)
    "set smartindent       "设置智能缩进
    "set cindent           " 使用 C/C++ 语言的自动缩进方式
    "set cinoptions={0,1s,t0,n-2,p2s,(03s,=.5s,>1s,=1s,:1s     "设置C/C++语言的具体缩进方式
    
    "  --------------------- 功能设置 -----------------------
    set hlsearch          "高亮搜索项
    set noexpandtab       "不允许扩展table
    syntax on             "开启语法高亮
    filetype on           "检测文件类型
    set mouse=a           "启用在buffer的任何地方使用鼠标
    set selection=exclusive
    set selectmode=mouse,key
    " 让配置变更立即生效
    autocmd BufWritePost $MYVIMRC source $MYVIMRC

2. vim打造IDE

"======================= 打造IDE =========================
"  ---------------------- 自动填充 ---------------------
" 当新建 .py .cc .sh .java等文件时自动调用SetTitle 函数  
autocmd BufNewFile *.py,*.sh exec ":call SetTitle()"
" 自动填写注释部分
func SetComment()
    call setline(2,"#=============================================")
    call setline(3,"#    Author: Dream")
    call setline(4,"#    Time:" .strftime("%F %T"))
    call setline(5,"#    Name:" .expand("%"))
    call setline(6,"#    Version: V1.0 ")
    call setline(7,"#    Description:This is a XXXX.")
    call setline(8,"#=============================================")
endfunc
" 根据文件后缀自动填写第一行信息
func SetTitle()
    if expand("%:e") == 'sh'
        call setline(1,"#! /bin/bash")
        call SetComment()
    elseif expand("%:e") == 'py'
        call setline(1,"#! /usr/bin/python3")
        call SetComment()
    endif
endfunc

"  ----------------------- 一键运行 ------------------------
"按F5一键编译并运行
map <F5> :call CompileRunGcc()<CR>
func! CompileRunGcc()
        exec "w"
        if &filetype == 'c'
           exec "!g++ % -DLOCAL -o   %<"
           exec "!time ./%<"
        elseif &filetype == 'cpp'
           exec "!g++ % -std=c++11 -DLOCAL -Dxiaoai -o    %<"
           exec "!time ./%<"
        elseif &filetype == 'java'
           exec "!javac %"
           exec "!time java %<"
        elseif &filetype == 'sh'
           :!time bash %
        elseif &filetype == 'python'
        exec "!time python3.5 %"
        endif
endfunc

微信扫一扫,分享到朋友圈

vim编辑器基础使用及高阶配置
0
别把想做的事情,留给遥不可及的未来!
上一篇

RedHat Enterprise Linux授权配置

发表评论

您的电子邮件地址不会被公开。 必填项已用 * 标注

提示:点击验证后方可评论!

插入图片
返回顶部