vim的概念
Vim是从 vi 发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛 使用,和Emacs并列成为类Unix系统用户最喜欢的文本编辑器。
vim的设计理念是命令的组合。用户学习了各种各样的文本间移动/跳转的命令和其他的普通模式的编辑命令,并且能够 灵活组合使用的话,能够比那些没有模式的编辑器更加高效的进行文本编辑。同时VIM与很多快捷键设置和正则表达式类似,可以辅助记忆。并且vim针对程序员做了优化。
vim的作用
创建或修改文本文件
维护Linux系统中的各种配置文件
vi/vim编辑器的工作模式
命令模式
启动 vi/vim,便进入了命令模式。此状态下敲击键盘动作会被vim识别为命令,而非输入字符。 该模式中主要完成如光标移动、字符串查找,以及删除、复制、粘贴文件内容等相关操作。
输入模式
命令模式按下i, I, o, O, a, A, r, R等任何一个字母之后即可进入输入模式。可以对内容进行编辑。 处于输入模式时,vi编辑器的最后一行会出现“–INSERT–”的状态提示信息。 按Esc键可以回到命令模式。
末行模式
命令模式下,按 : (英文冒号)即进入末行模式。在此模式下,可进行读取、查找替换文件内容、保存文件、 退出编辑器等操作。
模式间的切换
命令模式—————(i)—————>输入模式
命令模式—————(:)—————>末行模式
输入模式—————(esc)—————>命令模式
末行模式—————(esc)—————>命令模式
命令模式
此模式下,可使用方向键(上、下、左、右键)或 k、j、h、i 移动光标的位置,还可以对文件内容进行复制、粘贴、替换、删除等操作。
| 操作键 | 功能 |
|---|---|
| ctrl+f或者Pagedown | 向下翻页 |
| ctrl+b或者Pageup | 向上翻页 |
| Home;^;0 | 跳到本行的行首 |
| 按 End 键或$ | 跳转到本行的行尾 |
| 1G 或 gg | 跳转到文件的第一行包括空行 |
| G | 跳转文件的末尾 |
| #G | #代表行号数字,直接跳转到#行 |
| M | 跳转到当前显示页面的中间行 |
| x或delete | 删除当前光标的字符 |
| dd | 删除一整行 |
| #dd | 删除当前光标开始到第#行(包括当前行) |
| d^ | 删除当前光标之前到行首 往前不包括当前光标处的字符往后删除包括当前光标处的字符 |
| d$ | 删除当前光标到行尾 |
| dw | 删除当前光标处的单词 |
| R 或shift+r | 替换当前光标处文字,会进入替换模式 |
| yy | 复制当前光标处整行 |
| #yy | 复制当前光标处向下的#行 |
| p | 粘贴到光标处下一行 |
| P(大写) | 粘贴到光标处上一行 |
| u | 只消除上一次可多次使用 |
| U(大写) | U 取消所有操作 |
| /字符 | 向下查找 |
| ?字符 | 向上查找 |
| n | 向同一方向重复上次的查找指令 |
| N | 向相反方向重复上次的查找指定末行模式 |
输入模式
| 快捷键 | 功能描述 |
|---|---|
| i | 在光标前插入随后输入的文本,光标后的文本相应向右移动 |
| I | 行首插入命令。=^i ,移动到第一个非空字符并进入插入模式 |
| o | 在光标所在行的下面插入新的一行。光标停在空行首,等待输入文本 |
| O | 在光标所在行的上面插入新的一行。光标停在空行的行首,等待输入文本 |
| a | 在当前光标所在位置之后插入随后输入的文本 |
| A | 行尾插入命令 |
末行命令模式
文件中的指定内容执行保存、查找或替换等操作
| 快捷键 | 功能效果 |
|---|---|
| :q | 退出不保存 |
| :q! | 强制退出不保存 |
| :w | 保存 |
| :w | 新文件名另存为新文件 |
| :wq 或 :zz 或 :x | 保存并退出 |
| :e | 其他文件名(如果已修改需要加e!)打开新文件进行编辑 |
| :r | 其他文件名在当前文件中读入其他文件内容 |
| : [替换范围] s/旧内容/新内容[/g] | 将旧内容替换为新内容 |
| :s /old/new | 替换当前行中的第一个old改为new |
| :s /old/new/g | 替换当前行中的所有old改为new(/@#都可做分隔符) |
| :#,# s/old/new/g | #到#行所有old改为new |
| :% s/old/new/g | %代表全文,全文替换所有old改为new |
| :$ s/AB/CD/g | $表示最后一行,最后一行的AB替换为CD |
| :$-1 s/AB/CD/g | $-1表示倒数第二行,倒数第二行进行替换 |
| :# d | 删除 第#行 |
| :#,# d | 删除#到#行 |
| :#,# y | 复制三到6 行 |
| :set nu (:set nonu取消设置) | 加行号 不显示行号 |
| :set cul (:set nocul 取消设置) | 光标所在行有下划线(取消) |
| :set ai | 对齐 回车后和上一行对齐 |
| :set all | 可以看所有的一些帮助 |
| :set key=password | 加密码 |
| :set key=空白 | 取消密码 |
| :set tabstop=4 (set ts=4) | 按tab键,一次为四个空格 |
| :!< command> | 在vim内执行外部命令 |
| :!ls | 按回车后会列出当前目录内容 |
| :!hostname | 按回车后显示当前主机名 |
| :!date | 按回车后显示当前日期 |
| :1,3 co 10 | 将第1~3行复制粘贴到第10行下方(co表示copy) |
| :1,3 m 10 | 将第1~3行剪切到第10行下方(m表示move) |
| set nu | 显示行号 |