vim
Vim
基本概念
vim有三种状态,分别是命令行模式(command mode
)、输入模式(Insert mode
)和底线命令模式(last line mode
),这 3 种工作模式可随意切换。
命令行模式
我们使用vim编辑文件的时候,默认进入文件时是命令行模式。
Vim输入模式
在vim 输入模式下,可以对有写入权限
的文件进行写操作;通常在命令模式下直接通过命令进入输入模式:i
、I
、a
、A
、o
、O
等插入命令就可以进入;当我们编辑完文件之后按esc键
就可以退出出入模式返回命令模式:
快捷键 | 功能描述 |
---|---|
i | 在光标的左侧 输入文本,光标右侧文本向右移动 |
I | 在光标所在行的行首 输入文本,相当于在行首执行了i命令 |
a | 在光标的右侧 输入文本 |
A | 在光标所在行的尾部 进行输入文本,相当于在光标行尾执行a命令 |
o | 在光标所在行的下一行 增添新的一行,光标停留在新行的行首 |
O | 在光标所在行的上一行 增添新的一行,光标停留在新行的行首 |
底线命令模式
在命令模式下按:
(注意是英文冒号),此时vim的窗口左下方会出现一个:
符号,这时就已经进入了底线命令模式了。
注意:指令执行之后会把自动返回到命令行模式的。
作用:底线命令模式可以对文件中指定的内容进行保存、替换、查询、删除等等操作。
常用指令快捷键如下图:
快捷键 | 功能描述 |
---|---|
:q | 退出vi编辑器 |
:q! | 不保存文件,直接退出vi编辑器 |
:w | 只保存文件,但不退出vi编辑器 |
:wq | 保存文件且退出vim编辑器 |
:start,endd | 从第start行开始到end行进行删除操作 最后一个d标识删除 |
:%d | 清空文件内容(跳到行首dG执行也可删除) |
:! command | 暂时离开vim编辑器去到指令模式下执行 command 命令显示结果 |
:%d | 清空文件内容(跳到行首dG执行也可删除) |
常用命令 + 快捷键
打开文件
① 正常打开一个文件默认光标在第一行
➜ ~ vim filename -- filename指文件名
② 正常打开一个文件默认光标在文件尾部
➜ ~ vim + package.json -- package.json打开的文件名或者文件路径
③ 正常打开一个文件默认让光标定位在第几行
➜ ~ vim +num package.json -- num 标识光标定位到第几行
其他
① 字符移动命令
① h 将光标向左移动一格
② j 将光标向下移动一格
③ k 将光标向上移动一格
④ l 将光标向右移动一格
### 注意注意
这些移动的指令我们也可以带上一次移动多少,例如:2j -- 表示向下移动2格
② 单词移动命令
① w 将光标向右移动到下一个单词的词首
② b 将光标向前移动到前一个单词的词首
③ e 将光标跳转到当前或下一个单词的词尾
③ 首尾行移动命令
① $ 将光标移动到当前行的尾部
② 0 将光标移动到当前行的行首 -- 0 表示数字零 不是字母O
③ gg 将光标跳转到文件第一位置
④ G 将光标跳转到文件的末尾
⑤ num+G 将光标跳转到文件的第几行 -- num表示文件的第几行
⑥ :num 底线命令模式下,直接给出行号,同样可以实现跳转 -- num 跳转行数
④ 退出命令
① :wq 保存文件且退出vi编辑器
② :w 保存文件,但是不退出vi编辑器
③ :q 退出vi编辑器
④ :q! 不保存文件,直接退出vi编辑器
⑤ 翻页键命令
① ctrl+d 将光标向下翻半屏,通常每次翻屏12行
② ctrl+u 将光标向上翻半屏,通常每次翻屏12行
③ ctrl+f 将光标向下翻满屏,通常每次翻屏24行
④ ctrl+b 将光标向上翻满屏,通常每次翻屏24行
⑥ 剪切和粘贴键命令
① d 删除指定位置的文本且临时存储到缓存区;可使用p访问缓存区;常常这样使用:d、:num,numd、dd(删除整行)、..
② y 将指定文本复制到临时缓存区;可使用put操作符访问;常常这样使用:y、yy(复制整行)
③ p 将指定缓存区内容放在光标位置之下;整行文本放在行下面,若是非整行文本则放在光标后面
④ P 将指定缓冲区的内容放到当前光标的位置之上;整行文本放在行下面,若是非整行文本则放在光标后面
⑦ 文本修改键命令
① x 删除光标位置指定的字符
② dd 删除光标所在的行
③ u 撤销最近的修改,针对所有修改
④ U 撤销对当前行上做的所有修改
⑤ r 替换光标位置上的一个字符,但不会进入insert模式;例如2r:把后面2个字符替换掉
⑥ R 替换从光标位置开始的字符,同时改变vi到文本输入模式
⑦ . 重复上一次的修改 -- 注意该命令是:英文符号点
⑧ 搜索替换命令(需在底线命令模式)
① :/string 从文件首部开始查找到尾部;按n键可以跳到下一个,N上一个,另外按/键后,按上下键可以找到以前查找的记录,同样的也有记录
② :?string 同上,从当前光标向文件首部查找
③ :%s/word1/word2/g 从文件首到尾替换每一行的 word1为 word2
④ :num,num1s/word1/word2/g 从第num行到num1行替换word1为word2
⑤ :num,$s/word1/word2/g 从第num行查询word1字符串,并替换为word2
⑥ :s/str1/str2/g 从光标当前行搜索word1字符串并替换为word2
⑨ 将当前文件中的部分内容另存为另外一个文件
### 注意是在底线命令模式下
:num,$ w test.lua -- 将当前文件从第 num 行到最后一行内容,保存到test.lua中
⑩ 将别的文件内容填充在当前文件中
### 注意是在底线命令模式下
:r /usr/local/var/weixin/test.log 读取指定文件中的内容,插入到当前行的最后面
⑪ vim中批量添加注释命令
① 方法一:块选择模式(常用模式)
批量注释:
1、ctrl + v 进入块选择模式,然后移动光标选中你要注释的行,
2、再按大写的 I 进入行首插入模式输入注释符号;例如:#号或者//(双斜线)
3、输入完毕之后,按两下 ESC,Vim会自动将你选中的所有行首都加上注释,可能需要等上几秒钟
批量取消注释:
1、ctrl + v 进入块选择模式,选中你要删除的行首的注释符号
2、按 d 即可删除注释
② 方法二:替换命令(底线命令模式)
批量注释:
:start,edns/^/注释符/g -- start:起始行号;end:结束行号:注释符:#或者//
取消注释:
:start,edns/^注释符//g -- start:起始行号;end:结束行号:注释符:#或者//
⑫ 块选择命令
① ctrl + v 进入块选择模式,光标移动你要选中的单词
② 根据 h j k l来选中你需要的模块
③ 就可以对选中的数据进行各种操作了
⑬ 显示和取消行号
① :set nu 显示行号 也可以输入 set number
② :set nonu 取消行号
⑭ 设置文件内容自动缩进
① :set ai 开启自动缩进
② :set noai 关闭自动缩进
查找到的文本高亮显示
① :set hlsearch 开启文本高亮
② :set nohlsearch 关闭文本高亮
⑮ 多个文件一起编辑
➜~ vim filename1 filename2 filename3 ... -- 打开多个文件,默认打开第一个
① :prev 切换到上一个文件
② :N 切换到上一个文件
③ :next 切换到下一个文件
④ :n 切换到下一个文件
⑤ :last 切换到最后一个文件
⑥ :first 切换到第一个文件
⑦ :qa :全部退出
⑯ 多窗口功能
## 注意使用
① :sp filename 水平打开一个新窗口,显示新文件,若只输入:sp,则两窗口显示同一个文件
② ctrl+w + s 水平拆分窗口
③ ctrl+w + v 垂直拆分窗口
④ ctrl + w + j 光标移动到下方窗口
⑤ ctrl + w + k 光标移动到上方窗口
⑥ ctrl + w + q 离开当前窗口
⑰ 删除文本单词命令
① dw 删除当前光标后面的一个单词
② dnw 删除光标后面指定的n个单词 -- n表示要删除的单词数
③ d$ 删除当前光标到行尾的全部单词
④ d^ 删除当前光标到行首全部单词
⑤ dnj 从当前光标处向下删除n行 -- n表示删除的行数
⑥ dnk 从当前光标处向上删除n行 -- n表示删除的行数
⑦ :g/string/d 删除当前文件中string字符串的行
⑧ :%s/^\n$//g 删除空行
### 注意注意:
d指令换成c指令效果是一样的,只是操作完会变成insert模式