由于经常使用 vim 编辑配置文件,有时候也会进行使用vim 编写一些脚本和c/c++ 程序,所以配置一个常用的 vim 是很是必要的。这篇博文主要是记录vim使用和配置相关的一些知识点。

关于vim :

  vim 是比较好用的编辑器,很多linux server 都自带vi, vim 是vi 的升级版本。可以方便在linux 环境中进行安装和配置。vim主要功能是编写,并且有很好的扩展性。通过配置可以优化出适合自己的一种vim,并且可以把配置文件储存到github或者远程服务器上,当进入新的环境之中,只需要几行简单的命令,就可以还原配置。vim 有三种模式: 一般模式,编辑模式,命令行模式。通过快捷键 esc, : 可以方便得在三种模式下进行切换。如果想详细得了解 vim的使用可以阅读 《VIM USER MANUAL》,不过你只阅读本博文也是可以的。

vim 相关文件:

  1. .viminfo :

    • 在vim中操作的行为,vim会自动记录下来,保存在 ~/.viminfo 文件中。 这样为了方便下次处理, 如:vim打开文件时,光标会自动在上次离开的位置显示。 原来搜索过的字符串,新打开文件时自动高亮显示。 ~/.viminfo 文件是系统自动生成。
  2. .vimrc : 
    • vimrc文件是vim的环境设置文件。 整体的vim的设置是在 /etc/vimrc 文件中。 不建议修改/etc/vimrc 文件,每个用户可以在用户根目录中设置vim,新建 ~/.vimrc
  3. .vim目录:
    • .vim/ 目录是存放所有插件的地方。vim 有一套自己的脚本语言 vimscript,通过这种脚本语言可以实现与 vim 交互,达到功能扩展的目的。一组 vimscript 就是一个 vim 插件,vim 的很多功能都由各式插件实现。此外,vim 还支持 perl、python、lua、ruby 等主流脚本语言编写的插件,前提是 vim 源码编译时增加 ---enable-perlinterp、--enable-pythoninterp、--enable-luainterp、--enable-rubyinterp 等选项。vim.org 和 github.com 有丰富的插件资源,任何你想得到的功能,如果 vim 无法直接支持,那一般都有对应的插件。

vim 常用快捷键:

  1.  基本操作:
    • 移动:方向键,h, j, k, l ;  可与数字组合使用  10j, 向下10个字符, 20l:向右20个字符 ; 0 移动到行首,$ 移动到行尾; nG  n为数字,移动到第n行
    • 单词为单位移动:w 正向移动到相邻单词的首字符、b 逆向移动到相邻单词的首字符、e 正向移动到相邻单词的尾字符、 ge 逆向移动到相邻单词的尾字符;配合查找字符的方式移动:fa 正向移动到第一个字符 a 处、Fa 逆向移动到第一个字符 a 处。非相邻的单词或字符间移动,你可以配合数字参数,如,正向移动到相隔八个单词的首字符执行 8w、逆向移动到第四个 a 字符处执行 4Fa
    • 翻页:Ctrl + f 向下翻一页 ; Ctrl + b 向上一页;  Ctrl + d 向下半页 ; Ctrl + u 向上半页
    • 查找:/word 向下查找 word ; ?word 向上查找word;  n 重复前一次查找 ; N 重复前一次查找,反向进行
    • 删除:x 向后删除一个字符; 向前删除一个字符; nx n为数字,向后删除n个字符; dd 删除当前行;  ndd n为数字,删除n行
    • 复制:yy 复制当前行; nyy n为数字,复制向下的n行 ; y1G 复制从第一行到当前行; yG 复制当前行到最后一行 ; y0 复制从行首到光标之间的字符; y$ 复制光标所在到行尾之间的字符
    • 粘贴:p 粘贴到下一行; P 粘贴到上一行; J 将当前行和下一行合并成一行; u 还原上次操作 ;  Ctrl+r 重做上一个操作;  . 小数点,重复前一个操作
    • 编辑:i 光标所在处插入; I 当前行第一个非空字符出插入; a 光标下一个字符开始; o 下一行开始; O 上一行开始 : 进入编辑模式, esc 退出编辑模式;
    • 保存::w 保存文件; :w! 强制保存; :q 退出vim; :q! 退出不保存文件; :wq退出并保存文件, 表示进入命令行模式, esc 退出命令行模式。
    • 命令行: :! command 执行命令, 如 “:! ls -l” 列出当前目录文件; 当你发现打开文件时没有 保存权限的时候,可以通过命令行模式获取root 身份,w 保存文件。
    • vim 保存readonly 文件::w !sudo tee % : 运行外部shell命令,用 tee 把当前stdin缓冲区的数据写到当前文件(%)
    • 帮助信息: :h 查看帮助信息, :h 插件 查看对应插件的帮助信息。
    • 快速搜索:光标停留在想要查找的单词的任意一个字母上面, 然后输入Shift + *  或者 Shift+#  ,即可以向下和向上搜索光标所在的词,并且可以通过 或  N 进行上一个或下一个的匹配。此方法所有匹配单词会高亮,要取消高亮,输入:noh 来取消高亮.

 2. 块操作:

    • 进入: v, V, ctrl + v
    • 选择:v 字符选择,光标经过的地方反白选择; 行选择,光标经过的整行反白选择;Ctrl+v  块选择,长方形的方式选择
    • 复制,粘贴,删除:y 将选中的地方复制; d 将选中的地方删除;p 进行粘贴

   3. 多模式编辑 

    • 编辑下一个文件 :n 
    • 编辑上一个文件:N
    • 列出文件: files
    • 打开多个文件:vim file1 file2 , 文件之间可以进行互相复制,通过vim。这样在server中操作极为方便。

  4. 多窗口编辑:

    • Ctrl+w+j :移动下方窗口,先按Ctrl+w放开,然后 j 或者↓键
    • Ctrl+w+k :移动上方窗口
    • Ctrl+w+q :退出文件,同 :q
    • :sp [filename] :打开新窗口,filename可以为空,为空打开当前文件

vim 常用配置选项:

  1. set nu : 显示行号 , 取消:set nonu
  2. set ruler: 显示状态栏,右下角, 取消: set noruler
  3. 等,具体使用 可参见 我的vim 配置:

vim配置(myself):

" vim 自身功能配置
set nu " line number
set cursorline " row line
set cursorcolumn "col line
set hlsearch
set laststatus=
set nowrap " 前导键
let mapleader=";" " 基础配置
" filetype plugin on
" 命令映射,<Leader> 表示前导键
nmap LB
nmap LE $
nmap <Leader>q :q<CR>
nmap <Leader>w :w<CR>
nmap <Leader>Q :qa!<CR>
" 设置快捷键遍历子窗口
" " 依次遍历
nnoremap nw <C-W><C-W>
" 跳转至右方的窗口
nnoremap <Leader>lw <C-W>l
" 跳转至方的窗口
nnoremap <Leader>hw <C-W>h
" 跳转至上方的子窗口
nnoremap <Leader>kw <C-W>k
" 跳转至下方的子窗口
nnoremap <Leader>jw <C-W>j
" 让配置变更立即生效
autocmd BufWritePost $MYVIMRC source $MYVIMRC
" 实时搜索
set incsearch
" vim 自动补全
set wildmenu " 关闭兼容模式
set nocompatible " vundle required
" 插件安装
" vundle 环境设置
filetype off
set rtp+=~/.vim/bundle/Vundle.vim
" vundle 管理的插件列表必须位于 vundle#begin() 和 vundle#end() 之间
call vundle#begin()
" let Vundle manage Vundle, required
Plugin 'VundleVim/Vundle.vim'
Plugin 'altercation/vim-colors-solarized'
Plugin 'octol/vim-cpp-enhanced-highlight'
Plugin 'Lokaltog/vim-powerline'
Plugin 'scrooloose/nerdcommenter'
Plugin 'SirVer/ultisnips'
Plugin 'honza/vim-snippets'
Plugin 'scrooloose/nerdtree'
Plugin 'sjl/gundo.vim'
Plugin 'Valloric/YouCompleteMe'
"Plugin 'Valloric/YouCompleteMe'
" 插件列表结束
call vundle#end()
filetype plugin indent on " code scheme
syntax enable
syntax on
" set background=light
" colorscheme solarized " powerline scheme
let g:Powerline_colorscheme='solarized256'
" 代码缩进
" 设置编辑时制表符占用空格数
set tabstop=
" 设置格式化时制表符占用空格数
set shiftwidth=
" 自适应不同语言的智能缩进
filetype indent on " 基于缩进或语法进行代码折叠
set foldmethod=indent
"set foldmethod=syntax
set nofoldenable " vim-snippets
" let g:UltiSnipsExpandTrigger="<tab>"
" let g:UltiSnipsJumpForwardTrigger="<c-b>"
" let g:UltiSnipsJumpBackwardTrigger="<c-z>"
let g:UltiSnipsExpandTrigger="<leader><tab>"
let g:UltiSnipsJumpForwardTrigger="<leader><tab>"
let g:UltiSnipsJumpBackwardTrigger="<leader><s-tab>"
let g:UltiSnipsEditSplit="vertical" " 启用:Man命令查看各类man信息
source $VIMRUNTIME/ftplugin/man.vim
"
" " 定义:Man命令查看各类man信息的快捷键
nmap <Leader>man :Man <cword><CR> " 使用 NERDTree 插件查看工程文件。设置快捷键,速记:file list
nmap <Leader>fl :NERDTreeToggle<CR>
" 设置 NERDTree 子窗口宽度
let NERDTreeWinSize=
" 设置 NERDTree 子窗口位置
let NERDTreeWinPos="right"
" 显示隐藏文件
let NERDTreeShowHidden=
" NERDTree 子窗口中不显示冗余帮助信息
let NERDTreeMinimalUI=
" 删除文件时自动删除文件对应 buffer
let NERDTreeAutoDeleteBuffer= " 调用 gundo 树
nnoremap <Leader>ud :GundoToggle<CR>
" YCM 补全菜单配色
" 菜单
highlight Pmenu ctermfg= ctermbg= guifg=#005f87 guibg=#EEE8D5
" 选中项
"highlight PmenuSel ctermfg=2 ctermbg=3 guifg=#AFD700 guibg=#106900
" 补全功能在注释中同样有效
let g:ycm_complete_in_comments=
" 允许 vim 加载 .ycm_extra_conf.py 文件,不再提示
let g:ycm_confirm_extra_conf=
" 开启 YCM 标签补全引擎
let g:ycm_collect_identifiers_from_tags_files=
" 禁止缓存匹配项,每次都重新生成匹配项
let g:ycm_cache_omnifunc=
" " 语法关键字补全
let g:ycm_seed_identifiers_with_syntax=

本配置是参考网路上的配置方式来进行配置的,使用了 vundle 插件来管理vim 插件。 重定义了前导键:; , 使用了 的插件基本上来自github ,如果你们不明白具体的插件的作用,请访问github主页进行查询插件功能和配置方式。

配置功能如下:

  • 美化界面
  • 快速注释功能
  • 模板补全功能
  • 工程浏览功能
  • 代码补全功能

具体快捷方式,请看配置。配置好的vim 界面如下图:

vim 环境配置主要是方便服务器或者字符界面下的使用,现在图形界面上也有很多优秀的工具像 vscode, atom 等。总之,怎么方便怎么来; 如果你觉得本文对你有帮助,请点击右下角的推荐支持作者。

GitHub Repo : Vim 环境自动化配置脚本:https://github.com/yaowenxu/envfile/tree/master/vim

保持更新,转载请注明出处。

Linux : Vim 使用与配置 (附 GitHub 自动化配置脚本)的更多相关文章

  1. 【TEST】NOI-Linux可用 gedit c++精简配置 附Emacs日常配置

    这里是backup的测试随笔,用于测试 CSS / Markdown 效果. 同时也是是本菜鸡考场上一般使用的Gedit配置. 只有6行,挺短的.应该算好记吧. 使用之前记得勾选首选项里的外部工具. ...

  2. Linux小记 — Ubuntu自动化配置

    前言 工欲善其事,必先利其器.经过多次的重复配置ubuntu开发坏境,我终于决定花点时间总结一下,并将其写成一个自动化配置脚本.服务器实例:ubuntu 16.04,技术栈:shell,python. ...

  3. Linux 小记 — Ubuntu 自动化配置

    前言 工欲善其事,必先利其器.经过多次的重复配置 ubuntu 开发坏境,我终于决定花点时间总结一下,并将其写成一个自动化配置脚本.服务器实例:ubuntu 16.04,技术栈:shell,pytho ...

  4. Linux——配置使用github

    前一段时间在windows下配置了github的环境,参考“TortoiseGit连接github.com”一文,现在学习在linux下编程,在网上找了点资料,配置在linux下使用github,将过 ...

  5. 手把手教从零开始在GitHub上使用Hexo搭建博客教程(一)-附GitHub注册及配置

    前言 有朋友问了我关于博客系统搭建相关的问题,由于是做开发相关的工作,我给他推荐的是使用github的gh-pages服务搭建个人博客. 推荐理由: 免费:github提供gh-pages服务是免费的 ...

  6. Git使用:Linux(Ubuntu 14.04 x64)下安装Git并配置连接GitHub

    github是一个非常好的网络代码托管仓库,知晓许久,但是一直没有用起来,最近才开始使用git管理自己的文档和代码. Git是非常强大的版本管理工具,今天就告诉大家,如何在Linux下安装GIt,并且 ...

  7. linux vim 配置 go 开发环境

    安装vim-go 插件 vim 暂时对golang 还不支持语法高亮,如果用户希望使用vim 开发golang 程序,还需要给vim 安装对应的插件 首先需要安装一个vim-pathogen vim插 ...

  8. linux软件管理之------编译安装nginx服务器并手动编写自动化运行脚本

    红帽系列的 linux软件管理分为三类:1. rpm 安装软件.2. yum 安装软件.3. 源码包编译安装.前面两种会在相关专题给出详细讲解.源码包的编译安装是非常关键的,我们知道linux的相关版 ...

  9. vim IDE平台-打造属于自己的配置

    vim IDE平台-打造属于自己的配置 一.前言 目前工作环境基本以Linux为主,自然用到VIM也很多,很早就对如何提高VIM的使用效率有所研究,限于时间关系,也没做个系统记录和资料积累,时间久了又 ...

随机推荐

  1. 课程四(Convolutional Neural Networks),第一周(Foundations of Convolutional Neural Networks) —— 0.Learning Goals

    Learning Goals Understand the convolution operation Understand the pooling operation Remember the vo ...

  2. linux下配置nginx反向代理例子

    官方说明: 例子: 虚拟机ip:192.168.85.3,物理机VMware Network Adapter VMnet8  ip:192.168.85.1 1,准备tomcat 准备一tomcat, ...

  3. Tsql2008查询性能优化第一章---APPLY

       APPLY运算符涉及以下两个步骤中的一步或两步(取决于APPLY的类型):           1.A1把右表表达式应用于左表的行.           2.A2:添加外部行.       Ap ...

  4. csv文件格式说明

    csv文件应用很广泛,历史也很悠久.有很多种类型的csv格式,常用的是rfc 4180定义的格式. csv文件包含一行或多行记录,每行记录中包含一个或多个字段.记录与记录之间使用换行符分隔,最后一个记 ...

  5. Shell 文件测试运算符

    文件测试运算符 文件测试运算符用于检测 Unix 文件的各种属性. 属性检测描述如下: 操作符 说明 举例 -b file 检测文件是否是块设备文件,如果是,则返回 true. [ -b $file ...

  6. Python爬虫之多线程下载程序类电子书

      近段时间,笔者发现一个神奇的网站:http://www.allitebooks.com/ ,该网站提供了大量免费的编程方面的电子书,是技术爱好者们的福音.其页面如下:   那么我们是否可以通过Py ...

  7. 《精通CSS层叠样式表》

    书名 <精通CSS层叠样式表> 图片 时间 2017-7月 学习 感觉和ps一样对我都不友好 3天撸完

  8. Numbers、Strings、Lists 笔记<一>

    下一篇:流程控制<二> 阅读链接:官方Python3.7教程 废话:最近开始阅读python3.7文档,希望把容易混淆的知识记下来. 除法总是返回一个浮点数 >>> 8/ ...

  9. 百度api查询多个地址的经纬度的问题

    在使用百度api查询多个地址的经纬度的时候,由于百度api提供的经纬度查询方法是回调函数,并且后续操作必须等经纬度获取完成才能进行,问题就存在于怎么判断所有地点是否都回调完成了,问了之前的一个前端大佬 ...

  10. MVC 获取控制器名称和Action名称(转载)

    MVC在filter中如何获取控制器名称和Action名称   使用ActionExecutingContext对象可以获取控制器名称.Action名称.参数名称以及参数值.路由和Action返回值不 ...