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被当作了一个命令。

以下是常用的几个命令:

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

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

输入模式

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

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

底线命令模式

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

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

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

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

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

在命令模式中:

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

在底线命令模式下:

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

可视化模式

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

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

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

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

相关参数:

*   行号
* 显示:set number, 简写为set nu
* 取消显示:set nonumber, 简写为set nonu
* 忽略字符的大小写
* 启用:set ic
* 不忽略:set noic
* 自动缩进
* 启用:set ai
* 禁用:set noai
* 智能缩进
* 启用:smartindent 简写 set si
* 禁用:set nosi
* 高亮搜索
* 启用:set hlsearch
* 禁用:set nohlsearch
* 语法高亮
* 启用:syntax on
* 禁用:syntax off
* 显示Tab和换行符 ^I 和$显示
* 启用:set list
* 禁用:set nolist
* 文件格式
* 启用windows格式:set fileformat=dos
* 启用unix格式:set fileformat=unix
* 简写: set ff=dos|unix
* 设置文本宽度
* 启用: set textwidth=65 (vim only)
* 禁用: set wrapmargin=15
* 设置光标所在行的标识线
* 启用:set cursorline,简写cul
* 禁用:set no cursorline
* 复制保留格式
* 启用: set paste
* 禁用: set nopaste

自定义VIM配置

最新文章

  1. wp中TextBox在中文输入法下清空问题
  2. spring boot redis缓存JedisPool使用
  3. Asp.net中HttpRequest.Params与Reques.Item之异同
  4. java collections读书笔记(11) Lists
  5. centos mail 不能发邮件
  6. CSS定义网页滚动条
  7. 【转】Android 4.0.3 CTS 测试
  8. oracle后台进程2
  9. linux 下的 mkfifo、exec 命令使用
  10. 使用Java编译思想
  11. 个人网站建设(适合Java初学者)(一)
  12. 微信小程序(五) 利用模板动态加载数据
  13. Pyspark-SQL 官方 API 的一些梳理(上)
  14. spring4笔记----PropertyPlaceholderConfigurer 属性占位符配置器
  15. Statically Linking freeglut
  16. Django model 字段类型及选项解析
  17. 洛谷 P1464 Function【记忆化搜索】
  18. Vue系列之 =&gt; 使用钩子函数的第二个参数传参
  19. System.Windows.Forms.Timer、System.Timers.Timer、System.Threading.Timer的 区别和用法
  20. 深入理解ajax系列第七篇——传递JSON

热门文章

  1. maven settings.xml windows
  2. java获取服务器一些信息的方法
  3. linux安装源文件(.tar.gz)
  4. 从0到1分步实现一个出生日期的正则表达式(JavaScript)
  5. jsp-简单的猜数小游戏
  6. 草根程序员如何进入BAT
  7. Git中文件属性的变化,被认为是文件有改动
  8. C-C++字符输出时遇到字符'\n&#39;,&#39;\0&#39;区别
  9. 数据库limit子句
  10. dstat工具使用介绍