vim编辑器
vim有三种模式,命令模式,插入模式,末行模式,在一开始的时候默认进入的是命令模式
命令模式
命令模式:默认的模式,该模式下有很多的快捷键
文件内移动
- n+Shift+g(或nG)快速定位到指定的行,先按你想要的跳转的行,然后按G,如:7G,跳转到第7行
- Shift+g(或者G)跳转到尾行
- 0 跳转到该行首个字符
- gg跳转到首行
- num G 移到第num行
- :n 跳到指定行 n为指定的行号
- Ctrl+G 报告光标位置
- Ctrl+f 向下翻页
- Ctrl+b 向上翻页
- Ctrl+d 向下翻半页
- Ctrl+u 向上翻半页
- $ 跳转到该行最后一个字符
- w 光标前移一字
- b 光标倒退一字
- +移动非空格的下一行
- -移动非空格的上一行
- H 移到当前屏幕最顶行
- M 移到当前屏幕中央一行
- L 移到当前屏幕最底行
- n +回车(n表示数字)光标向下移动n行
- j 光标向下移动一格
- k 光标向上移动一格
行内移动
- ^ 移动到行首
- $ 移动到行尾
- w、b键,分别表示向后和向前移动一个单词
- h 光标向左移动一格
- l 光标向右移动一格
删除字母
- x 删除单个字母
- nx 删除多个字符
- dw 删除一个字符(剪切)
- d$ 删除当前光标所在位置至行尾的内容
删除整行
- dd 删除整行
- D 删除光标所在行到末尾行的内容
- ndd 删除多行
- :n1,n2d删除指定行
- dG 从当前行删除到文件尾
- 想要删除该行末尾的回车,也就是两行合并为一行,使用Shift+j
- J 删除当前光标所在位置至行尾的换行符,是该行和下一行处于同一行
剪切、复制、粘贴
- dd 既是删除也是剪切,按p是粘贴至光标后,P是粘贴至光标前
- yw 复制一个词
- y$ 复制到行尾
- yy 复制单行
- nyy 复制多行
- p 粘贴,从当前行后面粘贴被复制的行
- P 粘贴,从当前行前面粘贴被复制的行
撤销
- u 撤销修改
- Ctrl+r 反撤销
- :u! 恢复到文档初始状态
替换
- r 替换光标所在处的字母
- R 进入替换模式,从光标所在处开始替换字符,按esc结束
- 查找,按下/键,然后输入所要查找的字符,按回车,如果找到光标会跳转到第一个搜索结果的位置,然后按n,继续向下查找,如果按Shift+n,会反向向上查找
插入模式
插入模式(输入模式):可以向文件中输入字符的模式。
在命令模式下,
- 按a 在光标所在位置后插入(追加)
- 按i 在光标所在位置前插入(插入)
- 按A 在光标所在行尾插入
- 按I 在光标所在行首插入
- 按o 在光标上插入新行
- 按O 在光标上插入新行
按Esc退出输入模式,进入命令模式
末行模式
末行模式:该模式下,在vim界面最下边可以输入命令,来执行各种操作,编辑完文件之后,想要保存修改或者不保存修改都需要进入末行模式来进行操作,从命令模式切到底末模式,按:(冒号)进入末行模式
文件编辑
- :w 保存文件但不退出vi
- :w 文件名 将修改另外保存到新的文件中,不退出vi
- new 文件名 如果该文件存在则打开该文件,如果不存在,则新建(只有保存之后该文件才会创建成功)
- :w! 强制保存,不退出vi
- :wq 保存文件并退出vi
- :wq! 强制保存文件,并退出vi
- :q 不保存文件,退出vi
- :q! 不保存文件,强制退出vi
- :e! 放弃所有修改,从上次保存文件开始再编辑
参数设置
- :set nu 显示行号
- :set nonu 隐藏行号
- :set list 显示特殊符号(Tab用^I表示,换行符用$显示)
- :set nolist 不显示特殊符号
查找
- /查找内容 从光标处往下查找
- ?查找内容 从光标处往上查找
- n 下一个
- N 上一个
替换
- :s/old/new 当前行的第一个old替换为new
- :s/old/new/g 替换当前行的所有old为new
- :1,10s/old/new 将1到10行的每一行的第一个old替换为new,如果使用1,$则是从第一行到最后一行
- :1,10s/old/new/g 替换1到10行的所有old为new,如果使用1,$则是从第一行到最后一行
- :%s/old/new/g 替换全文的所有old为new
1 | #1到10行添加注释# (使用^是因为^在正则中表示行首) |
可以在vim中执行shell,而不退出vi
使用:!命令来实现
如
1 | :!pwd 来显示当前目录路径名 |
有时候普通用户使用vim编辑配置文件时,保存时没有root权限。之前我都是q!之后使用sudo重新打开文件编辑,后来发现可以在保存时使用
:w !sudo tee %
来进行保存这个命令是
:w ![cmd]
将文件buffer作为输入交给shell命令处理,此时cmd是sudo tee %
,sudo是用来获取管理员权限,tee是作为管道将当前缓存保存到某个文件中,%是vim的一个read only寄存器,存储着当前文件的绝对路径。连起来的意思就是把当前编辑的文件内容作为标准输入并输入到当前文件中