1.什么是 vim?

Vim是从 vi 发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。简单的来说, vi 是老式的字处理器,不过功能已经很齐全了,但是还是有可以进步的地方。 vim 则可以说是程序开发者的一项很好用的工具。熟练掌握VIM的快捷键与功能使用,可以对我们的运维工作,Shell脚本编写提供更高的效率。

vi/vim快捷键示意图 (初学可以打印出来贴显示器旁对着看,慢慢就全部记住了)

2.vi/vim 的基本使用

基键行为是依赖于vim的模式。基本上 vi/vim 共分为三种模式,分别是命令模式(Command mode)输入模式(Insert mode)底线命令模式(Last line mode)

命令模式

启动 vi/vim ,通过vim file 打开文件后,默认进入命令模式。命令模式通常可以移动光标,剪切/粘贴文本。此模式下敲击键盘动作会被Vim识别为命令,而非输入字符。比如我们此时按下i,并不会输入一个字符,i被当作了一个命令。

以下是常用的几个命令:

  1. * **i** 切换到输入模式,以输入字符。
  2. * I:移动光标到当前行行首,进行输入。
  3. * a:在光标所在处后面进行输入
  4. * A:移动光标到当前行行尾,在行尾进行输入
  5. * o:在光标所在行下方创建一个新行。
  6. * O:在光标所在行上方创建一个新行。
  7. * **x** 删除当前光标所在处的字符。
  8. * **:** 切换到**底线命令模式**,以在最底一行输入命令。

若想要编辑文本:启动Vim,进入了命令模式,按下i,切换到输入模式。命令模式只有一些最基本的命令,因此仍要依靠底线命令模式输入更多命令。

输入模式

在命令模式中按下** i **键,即进入的输入模式。在输入模式中可以使用以下按键。

  1. * **字符按键以及Shift组合**:输入字符
  2. * **ENTER**:回车键,换行
  3. * **BACK SPACE:**退格键,删除光标前一个字符
  4. * **DEL:**删除键,删除光标后一个字符
  5. * **方向键**:在文本中移动光标
  6. * **HOME**/**END**:移动光标到行首/行尾
  7. * **Page Up**/**Page Down:**上/下翻页
  8. * **Insert**:切换光标为输入/替换模式,光标将变成竖线/下划线
  9. * **ESC**:退出输入模式,切换到命令模式

底线命令模式

在命令模式下按下:(英文冒号)就进入了底线命令模式。底线命令模式可以输入单个或多个字符的命令,可用的命令非常多。

在底线命令模式中,基本的命令有(已经省略了冒号):

  1. * q 退出程序
  2. * q! 不存盘退出
  3. * w 保存文件
  4. * wq 保存并退出
  5. * x 保存退出(不建议使用)
  6. * r filename 读文件内容到当前文件中来
  7. * w filename 将当前文件内容写入另一个文件中
  8. * !com 执行命令
  9. * r !com 读入命令的输出

按ESC键可随时退出底线命令模式。

3.VIM 三大模式的更多用法

在命令模式中:

快速移动光标
  1. * 逐字符移动
  2. * h:向左
  3. * l:向右
  4. * j:向下
  5. * k:向上
  6. * # h:移动#个字符
  7. * 以单词为单位移动
  8. * w:移到下一个单词的词首
  9. * e:跳至当前或下一个单词的词尾
  10. * b:跳至当前或上一个单词的词首
  11. * #w:表示移动#个单词
  12. * 行内跳转
  13. * 0:跳转至绝对行首
  14. * ^:跳转至行首第一个非空白字符
  15. * $:跳转至绝对行尾
  16. * 行间跳转
  17. * # G:跳转到第#行
  18. * G:最后一行
  19. * 1G,gg:跳转至第一行
  20. * 句间移动
  21. * ):跳转到下一句
  22. * (:跳转到上一句
  23. * 段落间移动
  24. * }:跳转到下一段
  25. * {:跳转到上一段
翻屏操作
  1. * Ctrl+f: 向文件尾部翻一屏
  2. * Ctrl+b: 向文件首部翻一屏
  3. * Ctrl+d: 向文件尾部翻半屏
  4. * Ctrl+u:向文件首部翻半屏
字符编辑
  1. * 编辑字符
  2. * x:删除光标处的字符
  3. * # x:删除从光标处开始的#个字符
  4. * xp:对调光标所在的字符及其后面字符的位置。(x是剪切,p是粘贴)
  5. * ~:转换光标字符大小写
  6. * J:删除当前行后的换行符,合并
  7. * 替换命令
  8. * R:切换成替换模式
  9. * r:替换光标所在处的字符
  10. * 删除命令
  11. * d:删除命令,可结合选择进行范围删除
  12. * d$:从光标位置开始,删除到行尾
  13. * d^:从光标位置开始,删除到行首
  14. * dw: 删除到词尾
  15. * de: 删除单词,从光标位置到词尾
  16. * db: 删除上一个单词
  17. * dd:删除光标所在行
  18. * #dd:删除#行(多行删除)
  19. * 复制命令
  20. * y: 复制,行为相似于d命令
  21. * y$:从光标处复制到行尾
  22. * y0: 从光标处到行首第一个有字符的位置
  23. * y^:从光标处到绝对行首
  24. * ye 复制单词
  25. * yw
  26. * yb
  27. * yy:复制整行
  28. * #yy:复制#行
  29. * 粘贴命令
  30. * p:缓冲区存的如果为整行,则粘贴当前光标所在行的下方;否则,则粘贴至当前光标所在处的后面
  31. * P:缓冲区存的如果为整行,则粘贴当前光标所在行的上方;否则,则粘贴至当前光标所在处的前面
  32. * 改变命令 (使用改变命令,就是先修改光标选择的位置,然后自动改变为插入模式),用法参考删除命令和黏贴命令,改变命令的关键词为:c
  33. * c$
  34. * c^
  35. * ……
  36. * 撤销命令
  37. * u:撤销最近修改
  38. * # u:撤销最近#次的修改
  39. * U:撤销光标落在此行后所有的修改(**必须光标一直落在该行,如果光标移动到他行,再回来,缓存中会清空该行的撤销记录,无法撤销**)
  40. * Ctrl +r 重做最后撤销掉的操作
  41. * .重复前一次的操作
  42. * n. 重复前一个操作N
命令连用模式
  1. 100iddz [ESC] 粘贴“ddz 100
  2. <start position><command><end position>
  3. Command:
  4. y 复制、 d 删除、 gU 变大写、 gu 变小写
  5. 例如 0y$ 命令意味着:
  6. 0 先到行头
  7. y 从这里开始拷贝
  8. $ 拷贝到本行最后一个字符
  9. 这时按p就可以拷贝这些数据

在底线命令模式下:

  1. * 地址定界:匹配到指定的行 格式:start_pos,end_pos
  2. * # : 跳转到具体第#行,例如2表示第2行
  3. * #,# 从左侧#表示起始行,到右侧#表示结尾行
  4. * #,+# 从左侧#表示的起始行,加上右侧#表示的行数。(例如2,+3 表示2到5行
  5. . 当前行
  6. * $ 最后一行(.,$-1 从当前行到倒数第二行)
  7. * % 全文, 相当于1,$
  8. * /pat1/,/pat2/(pat1pat2为正则表达式,代表
  9. 从第一次被pat1模式匹配到的行开始,一直到第一次被pat2匹配到的行结束。比如: #,/pat/ , /pat/,$ , /^b/,/^l/d:删除以“b”开头到以“l”开头的行 )
  10. 使用方式:后跟一个编辑命令
  11. d(删除):25d—删除第2到第5
  12. y(复制):25y—复制第2到第5
  13. w file: 将范围内的行另存至指定文件中
  14. r file:在指定位置插入指定文件中的所有内容
  15. * 查找命令
  16. * /PATTERN:从当前光标所在处向文件尾部查找
  17. * ?PATTERN:从当前光标所在处向文件首部查找
  18. * n:与命令同方向
  19. * N:与命令反方向
  20. * 查找并替换内容
  21. * 格式: s/要查找的内容/替换的内容/替换模式修饰符
  22. * 要查找的内容:可使用模式(可使用正则表达式匹配)
  23. * 替换为的内容:不能使用模式,但可以使用\1, \2, …等后向引用符号;还可以使用“&”引用前面查找时查找到的整个内容
  24. * 修饰符
  25. * i:忽略大小写
  26. * g:全局替换(默认情况下每一行只替换第一次匹配到的)
  27. * 查找替换符中的分隔符/可替换为其他字符 :如 s#haha#hehe#g

可视化模式

  1. * 允许选择的文本块
  2. * v 面向字符
  3. * V 面向行
  4. * ctrl-v 面向块
  5. * 可视化键可用于与移动键结合使用:w ) } 箭头等,突出显示的文字可被删除,复制,变更,过滤,搜索,替换等

4.文件配置 – 定制自己专属的VIM

我们可以创建自己的配置文件,来配置VIM,让我们更便捷的进行文档编辑工作。配置文件需要放置在以下路径。

  1. * 全局:/etc/vimrc
  2. * 个人:~/.vimrc

相关参数:

  1. * 行号
  2. * 显示:set number, 简写为set nu
  3. * 取消显示:set nonumber, 简写为set nonu
  4. * 忽略字符的大小写
  5. * 启用:set ic
  6. * 不忽略:set noic
  7. * 自动缩进
  8. * 启用:set ai
  9. * 禁用:set noai
  10. * 智能缩进
  11. * 启用:smartindent 简写 set si
  12. * 禁用:set nosi
  13. * 高亮搜索
  14. * 启用:set hlsearch
  15. * 禁用:set nohlsearch
  16. * 语法高亮
  17. * 启用:syntax on
  18. * 禁用:syntax off
  19. * 显示Tab和换行符 ^I $显示
  20. * 启用:set list
  21. * 禁用:set nolist
  22. * 文件格式
  23. * 启用windows格式:set fileformat=dos
  24. * 启用unix格式:set fileformat=unix
  25. * 简写: set ff=dos|unix
  26. * 设置文本宽度
  27. * 启用: set textwidth=65 (vim only)
  28. * 禁用: set wrapmargin=15
  29. * 设置光标所在行的标识线
  30. * 启用:set cursorline,简写cul
  31. * 禁用:set no cursorline
  32. * 复制保留格式
  33. * 启用: set paste
  34. * 禁用: set nopaste

自定义VIM配置

VIM 编辑器 -使用详解记录的更多相关文章

  1. Linux vim编辑器使用详解

    在Linux中,主要编辑器为vi或者vim,本文围绕vim做简单的讲解说明: Linux默认自带vi(vim)编辑器,其程序包为: [root@xuegod163 ~]# rpm -qf `--1.8 ...

  2. vim编辑器使用详解

    Linux之vim编辑器使用 vim三种模式:命令模式,插入模式,退出模式 移动光标操作 左移动一个字符: 按 h 键 右移动一个字符:按 l 键 下移动一行:按 j 键 上移动一行:按 k 键 移动 ...

  3. VIM 编辑器操作详解

    1 vim 使用介绍 1.1 vim 安装 # CentOS 安装: yum install -y vim # Ubuntu 安装: sudu apt-get install vim 安装完成后,可使 ...

  4. Linux Shell编程与编辑器使用详解

    <Linux Shell编程与编辑器使用详解> 基本信息 作者: 刘丽霞 杨宇 出版社:电子工业出版社 ISBN:9787121207174 上架时间:2013-7-22 出版日期:201 ...

  5. Linux vim常见使用详解

    教你用Vim编辑器 1.Vim编辑器基本使用方法 光标移动 查找/替换 插入模式 复制/粘贴 复制/粘贴 2.vim打开时的警告信息 当使用vim打开一个文件时,会同时在该目录下创建个.filenam ...

  6. spring AspectJ切入点语法详解 记录以便查阅

    AspectJ切入点语法详解 6.5.1  Spring AOP支持的AspectJ切入点指示符 切入点指示符用来指示切入点表达式目的,,在Spring AOP中目前只有执行方法这一个连接点,Spri ...

  7. vim配置vimrc详解

    vimrc的存放位置: 系统 vimrc 文件: "$VIM/vimrc" 用户 vimrc 文件: "$HOME/.vimrc" 用户 exrc 文件: &q ...

  8. vim配置vimrc详解(转)

    vimrc的存放位置: 系统 vimrc 文件: "$VIM/vimrc" 用户 vimrc 文件: "$HOME/.vimrc" 用户 exrc 文件: &q ...

  9. Shell 基础 -- 流编辑器 sed 详解

    一.流编辑器 sed 与命令 sed Linux 中,常使用流编辑器 sed 进行文本替换工作.与常使用的交互式编辑器(如vim)不同,sed 编辑器以批处理的方式来编辑文件,这比交互式编辑器快得多, ...

随机推荐

  1. 用户角色权限查询添加bug集锦 用户密码加密 MD5 加盐 随机盐 spring的加密bcrypt

    package cn.itcast.encode; import org.apache.commons.lang3.RandomStringUtils; import org.springframew ...

  2. SQL SERVER CAST 和 CONVERT 函数

    遇到CAST 函数转化数字不一致情况, select CAST('0000000011237590798' AS money) / 100 AS Amount--output : 112375907. ...

  3. 引入clipboard.js

    引入clipboard.js var clipboardJS = new ClipboardJS('#accept-data'); // 括号内的是选择器

  4. java类在eclipse上打jar包,Linux上成功运行的实例

    1 eclipse下的java项目结构如下图所示: 2 打包的步骤如下: 3 修改minifest.mf文件:  4 .上传需要的三方jar包们和主类打的jar(案例是topV.jar)并且执行jav ...

  5. MySQL 如何在一个语句中更新一个数值后返回该值 -- 自增长种子竞态问题处理

    什么是竞态问题? 假设有一个计数器,首先当前值自增长,然后获取到自增长之后的当前值.自增长后的值有可能被有些操作用来当做唯一性标识,因此并发的操作不能允许取得相同的值. 为什么不能使用使用UPDATE ...

  6. ABAP扫雷游戏

    . INCLUDE <icon>. CONSTANTS: " >> board cell values blank_hidden ', blank_marked TY ...

  7. equals()方法详解

    Java语言中equals()方法的使用可以说比较的频繁,但是如果轻视equals()方法,一些意想不到的错误就会产生.哈哈,说的有点严重了~ 先谈谈equals()方法的出身.equals()方法在 ...

  8. smtplib.SMTPDataError: (554, b'DT:SPM 163 smtp10,DsCowAA3nir1u6xZq42WDw--.22935S2 1504492533,please

    # from email.mime.text import MIMEText # # msg = MIMEText('hello, send by Python...', 'plain', 'utf- ...

  9. COGS 1215. [Tyvj Aug11] 冗余电网

    ★   输入文件:ugrid.in   输出文件:ugrid.out   简单对比时间限制:1 s   内存限制:128 MB TYVJ八月月赛提高组第2题 测试点数目:5 测试点分值:20 --内存 ...

  10. Codeforces Round #320 (Div. 1) [Bayan Thanks-Round] C A Weakness and Poorness (三分)

    显然f(x)是个凹函数,三分即可,计算方案的时候dp一下.eps取大了会挂精度,指定循环次数才是正解. #include<bits/stdc++.h> using namespace st ...