vim学习笔记
vim学习笔记
常用命令
- 命令可以保存到/etc/vim/vimrc配置文件中
- set number 显示行号
- set nu 显示行号
模式
- i , o , a 输入模式
- R替换模式
- :命令模式
- ESC普通模式
- 视图模式(常用于块复制粘贴)
光标移动
单个字符移动:
- h: 向左移动
- l: 向右移动
- j: 向下移动
- k: 向上移动
- xh: 向左移动 x 个字符距离
单词移动:
- w: 将光标移动到下一个单词的开头
- b: 将光标移动到前一个单词的开头
- e: 将光标移动到下一个单词的词末
- E: 移动到单词的结尾(忽略标点符号)
- ge: 将光标移动到上一个单词的词末
- 2w: 指定移动的次数
行移动:
- $: 将光标移动到当前行的行尾
- 0:将光标移动到当前行的行首
- ^:将光标移动到当前行的第一个非空字符
- 2|:移到当前行的第 2 列
- fx:将光标移动到当前行的第一个字符 x 上
- 3fx: 将光标移动到航前行的第 3 个字符 x 上
- tx: 将光标移动到目标字符 x 的前一个字符上
- fx 和 tx 可以通过;和,进行正向或反向重复移动
- %: 用于符号间的移动,它会在一对()、[]、{}之间跳跃文本块移动:
- (:移到当前句子的开头
- ): 移到下一个句子的开头
- {: 移到当前一段的开头
- }:移到下一段的开头
- [[: 移到当前这一节的开头
- ]]: 移到下一节的开头
- 在屏幕中移动
- xG: 跳转到指定的第 x 行,G 移动到文件按末尾,
- ``(2 次单引号)返回到跳转前的位置
- gg: 移动到文件开头
- x%: 移动到文件中间,就使用 50%
- H: 移动到 home
- M: 移动到屏幕中间
- L: 移动到一屏末尾
- ctrl+G: 查看当前的位置状态
滚屏与跳转
- 半屏滚动: ctrl+u/ctrl+d
- 全屏滚动: ctrl+f/ctrl+b
- 定位光标的位置
- zz:将光标置于屏幕的中间
- zt: 将光标移动到屏幕的顶部
- zb:将光标移动到屏幕的底部
- 设置跳转标记
- mx,my,mz 设置三个位置
- x,
y,
z 跳转到设置
文本插入操作
- i: 在当前光标的前面插入字符
- a: 在当前光标的后面追加字符
- o: 在当前光标的下一行行首插入字符
- I:在一行的开头添加文本
- A:在一行的结尾处添加文本
- O:在光标当前行的上一行插入文本
- s:删除当前光标处的字符并进入到插入模式
- S:删除光标所在处的行,并进入到插入模式
- u: 撤销修改
文本删除
字符删除
- x: 删除当前光标所在处的字符
- X:删除当前光标左边的字符
单词删除
- dw: 删除一个单词(从光标处到空格)
- daw: 删除光标所在的整个单词(包括空白字符)
- diw: 删除整个单词文本,但是保留空格字符不删除
- d2w: 删除从当前光标开始处的 2 个单词
- d$: 删除从光标到一行末尾的整个文本
- d0: 删除从光标到一行开头的所有单词
- dl: 删除当前光标处的字符=x
- dh: 删除当前光标左边的字符=X
行删除
- dd: 删除当前光标处的一整行=D
- 5dd: 删除从光标开始处的 5 行代码
- dgg: 删除从光标到文本开头
- dG: 删除从光标到文本结尾
行合并
- J:删除一个分行符,将当前行与下一行合并
文本复制、剪切与粘贴
- y: 复制,p:粘贴
- yw: 复制一个单词
- y2w: 复制 2 个单词
- y$: 复制从当前光标到行结尾的所有单词
- y0: 复制从当前光标到行首的所有单词
- yy: 复制一整行
- 2yy: 复制从当前光标所在行开始的 2 行
复制文本块
1.首先进入 visual 模式:v
2.移动光标选择文本
3.复制与粘贴的操作
文本修改与替换
- cw: 删除从光标处到单词结尾的文本并进入到插入模式
- cb: 删除从光标处到单词开头的文本并进入到插入模式
- cc: 删除一整行并进入到插入模式
- ~: 修改光标下字符的大小写
- r: 替换当前光标下的字符
- R:进入到替换模式
- xp: 交换光标和下一个字符
组合命令使用
更改 | 删除 | 复制 | 从光标位置到… |
---|---|---|---|
cH | dH | yH | 屏幕顶端 |
cL | dL | yL | 屏幕低端 |
c+ | d+ | y+ | 下一行 |
c5l | d5l | y5l | 本行的第 5 列 |
2c) | 2d) | 2y) | 往下第 2 个句子 |
c{ | d{ | y{ | 上一段 |
cG | dG | yG | 文件结尾 |
c13G | d13G | y13G | 第 13 行 |
文本查找与替换
字符串查找
- /string 正向查找
- ?string 反向查找
设置高亮显示
- :set hls
- *按键将当前光标处的单词高亮显示
- 使用 n 浏览下一个查找高亮的结果
字符串替换
- ????/old/new 将当前行的第一个字符串 old 替换为 new
- ????/old/new/g 将当前行的所有字符串 old 替换为 new
- :90s/old/new/g 将指定行的所有字符串 old 替换为 new
- :90,93s/old/new/g 将 90 到 93 行的所有字符串 old 替换为 new
- :%s/old/new/g 将文本中所有的字符串 old 替换为 new
- :%s/old/new/gc 依次替换每个字符串关键字
- :%s/^struct/int/g 将所有以 struct 开头的字符串替换为 int
修改的撤销、重做和保存
- u: 撤销上一步的操作。
- Ctrl+r: 将原来的插销重做一遍
- U:恢复一整行原来的面貌(文件打开时的文本状态)
- q: 若文件没有修改,直接退出
- q!: 文件已经被修改,放弃修改退出
- wq: 文件已经被修改,保存修改并退出
- e!: 放弃修改,重新回到文件打开时的状态
编辑多个文件
文件和缓冲区的区别
- 文件是保存在磁盘上的,而打开的文件的文件是在内存中
- 在内存中有一个缓冲区,用来存放打开的文件
- vim 每次打开文件时都会创建一个缓冲区,vim 支持打开多个文件
- :buffers 查看缓冲区列表==ls
- :buffer N 根据缓冲区列表的编号跳转到指定缓冲区
- :bnext/bprev 遍历缓冲区列表
- :bfirst/blast 分别调到缓冲区列表的开头和结尾
- :write 将缓冲区的修改保存到磁盘上
- :edit! e!放弃缓冲区的修改,恢复到文件打开时的状态
- :edit file 编辑另一个文件
- :wnext 保存当前缓冲区的修改并跳转到缓冲区列表中的下一个文件
- :set autowrite
标签页与折叠栏
- 标签页的新建:tabedit file/tab split
- 标签页的切换: tabn/tabp
- 按键:gt/gT
- 标签页的关闭: tabclose
- 关闭当前的标签页:tabonly
创建一个折叠
- zf200G: 将光标和 200 行之间的代码折叠起来
折叠的打开与关闭
- za: 打开和关闭折叠
- zr/zm: 一层一层地打开和关闭折叠
- zR/zM: 分别打开和关闭所有的折叠
折叠键的光标移动
- zj: 跳转到下一个折叠处
- zk: 跳转到上一个折叠处
删除折叠
- zd: 删除光标下的折叠
- zD: 删除光标下的折叠以及嵌套的折叠
- zE: 删除所有的折叠标签
- 创建的折叠当退出 vim 之后失效
多窗口操作
分割窗口
- split/vsplit filename
窗口间跳转
- ctrl+w hjkl
- ctrl+w w
移动窗口
- ctrl+w HJKL
调整窗口尺寸
- ctrl+w +/- 调整窗口的高度
- ctrl+w </> 调整窗口的宽度
- ctrl+w = 所有的窗口设置相同的尺寸
- :resize n 将当前窗口尺寸调整为 N 行
关闭窗口
- close: 关闭一个窗口
- qall: 退出所有窗口
- qall!: 放弃修改,退出所有窗口
- wqall: 保存并退出所有窗口
- wall: 保存所有窗口