Linux : Vim 使用与配置 (附 GitHub 自动化配置脚本)
由于经常使用 vim 编辑配置文件,有时候也会进行使用vim 编写一些脚本和c/c++ 程序,所以配置一个常用的 vim 是很是必要的。这篇博文主要是记录vim使用和配置相关的一些知识点。
关于vim :
vim 是比较好用的编辑器,很多linux server 都自带vi, vim 是vi 的升级版本。可以方便在linux 环境中进行安装和配置。vim主要功能是编写,并且有很好的扩展性。通过配置可以优化出适合自己的一种vim,并且可以把配置文件储存到github或者远程服务器上,当进入新的环境之中,只需要几行简单的命令,就可以还原配置。vim 有三种模式: 一般模式,编辑模式,命令行模式。通过快捷键 esc, : 可以方便得在三种模式下进行切换。如果想详细得了解 vim的使用可以阅读 《VIM USER MANUAL》,不过你只阅读本博文也是可以的。
vim 相关文件:
- .viminfo :
- 在vim中操作的行为,vim会自动记录下来,保存在 ~/.viminfo 文件中。 这样为了方便下次处理, 如:vim打开文件时,光标会自动在上次离开的位置显示。 原来搜索过的字符串,新打开文件时自动高亮显示。 ~/.viminfo 文件是系统自动生成。
- .vimrc :
- vimrc文件是vim的环境设置文件。 整体的vim的设置是在 /etc/vimrc 文件中。 不建议修改/etc/vimrc 文件,每个用户可以在用户根目录中设置vim,新建 ~/.vimrc
- .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 常用快捷键:
- 基本操作:
- 移动:方向键,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 向后删除一个字符; 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 或 N 进行上一个或下一个的匹配。此方法所有匹配单词会高亮,要取消高亮,输入:noh 来取消高亮.
2. 块操作:
- 进入: v, V, ctrl + v
- 选择: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 常用配置选项:
- set nu : 显示行号 , 取消:set nonu
- set ruler: 显示状态栏,右下角, 取消: set noruler
- 等,具体使用 可参见 我的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 自动化配置脚本)的更多相关文章
- 【TEST】NOI-Linux可用 gedit c++精简配置 附Emacs日常配置
这里是backup的测试随笔,用于测试 CSS / Markdown 效果. 同时也是是本菜鸡考场上一般使用的Gedit配置. 只有6行,挺短的.应该算好记吧. 使用之前记得勾选首选项里的外部工具. ...
- Linux小记 — Ubuntu自动化配置
前言 工欲善其事,必先利其器.经过多次的重复配置ubuntu开发坏境,我终于决定花点时间总结一下,并将其写成一个自动化配置脚本.服务器实例:ubuntu 16.04,技术栈:shell,python. ...
- Linux 小记 — Ubuntu 自动化配置
前言 工欲善其事,必先利其器.经过多次的重复配置 ubuntu 开发坏境,我终于决定花点时间总结一下,并将其写成一个自动化配置脚本.服务器实例:ubuntu 16.04,技术栈:shell,pytho ...
- Linux——配置使用github
前一段时间在windows下配置了github的环境,参考“TortoiseGit连接github.com”一文,现在学习在linux下编程,在网上找了点资料,配置在linux下使用github,将过 ...
- 手把手教从零开始在GitHub上使用Hexo搭建博客教程(一)-附GitHub注册及配置
前言 有朋友问了我关于博客系统搭建相关的问题,由于是做开发相关的工作,我给他推荐的是使用github的gh-pages服务搭建个人博客. 推荐理由: 免费:github提供gh-pages服务是免费的 ...
- Git使用:Linux(Ubuntu 14.04 x64)下安装Git并配置连接GitHub
github是一个非常好的网络代码托管仓库,知晓许久,但是一直没有用起来,最近才开始使用git管理自己的文档和代码. Git是非常强大的版本管理工具,今天就告诉大家,如何在Linux下安装GIt,并且 ...
- linux vim 配置 go 开发环境
安装vim-go 插件 vim 暂时对golang 还不支持语法高亮,如果用户希望使用vim 开发golang 程序,还需要给vim 安装对应的插件 首先需要安装一个vim-pathogen vim插 ...
- linux软件管理之------编译安装nginx服务器并手动编写自动化运行脚本
红帽系列的 linux软件管理分为三类:1. rpm 安装软件.2. yum 安装软件.3. 源码包编译安装.前面两种会在相关专题给出详细讲解.源码包的编译安装是非常关键的,我们知道linux的相关版 ...
- vim IDE平台-打造属于自己的配置
vim IDE平台-打造属于自己的配置 一.前言 目前工作环境基本以Linux为主,自然用到VIM也很多,很早就对如何提高VIM的使用效率有所研究,限于时间关系,也没做个系统记录和资料积累,时间久了又 ...
随机推荐
- 课程四(Convolutional Neural Networks),第一周(Foundations of Convolutional Neural Networks) —— 0.Learning Goals
Learning Goals Understand the convolution operation Understand the pooling operation Remember the vo ...
- linux下配置nginx反向代理例子
官方说明: 例子: 虚拟机ip:192.168.85.3,物理机VMware Network Adapter VMnet8 ip:192.168.85.1 1,准备tomcat 准备一tomcat, ...
- Tsql2008查询性能优化第一章---APPLY
APPLY运算符涉及以下两个步骤中的一步或两步(取决于APPLY的类型): 1.A1把右表表达式应用于左表的行. 2.A2:添加外部行. Ap ...
- csv文件格式说明
csv文件应用很广泛,历史也很悠久.有很多种类型的csv格式,常用的是rfc 4180定义的格式. csv文件包含一行或多行记录,每行记录中包含一个或多个字段.记录与记录之间使用换行符分隔,最后一个记 ...
- Shell 文件测试运算符
文件测试运算符 文件测试运算符用于检测 Unix 文件的各种属性. 属性检测描述如下: 操作符 说明 举例 -b file 检测文件是否是块设备文件,如果是,则返回 true. [ -b $file ...
- Python爬虫之多线程下载程序类电子书
近段时间,笔者发现一个神奇的网站:http://www.allitebooks.com/ ,该网站提供了大量免费的编程方面的电子书,是技术爱好者们的福音.其页面如下: 那么我们是否可以通过Py ...
- 《精通CSS层叠样式表》
书名 <精通CSS层叠样式表> 图片 时间 2017-7月 学习 感觉和ps一样对我都不友好 3天撸完
- Numbers、Strings、Lists 笔记<一>
下一篇:流程控制<二> 阅读链接:官方Python3.7教程 废话:最近开始阅读python3.7文档,希望把容易混淆的知识记下来. 除法总是返回一个浮点数 >>> 8/ ...
- 百度api查询多个地址的经纬度的问题
在使用百度api查询多个地址的经纬度的时候,由于百度api提供的经纬度查询方法是回调函数,并且后续操作必须等经纬度获取完成才能进行,问题就存在于怎么判断所有地点是否都回调完成了,问了之前的一个前端大佬 ...
- MVC 获取控制器名称和Action名称(转载)
MVC在filter中如何获取控制器名称和Action名称 使用ActionExecutingContext对象可以获取控制器名称.Action名称.参数名称以及参数值.路由和Action返回值不 ...