vim 笔记
vim cheatsheet https://vim.rtorr.com/
Mode
vim 有四种模式
- normal,普通模式,按下
esc
,ctrl + [
可以进入 normal mode - insert,插入模式
i, a, o
, insert, append, open a line below - command-line,使用
:
可以进入 command-line mode,可以进行很多操作 - visual,块状选择,v 以字符为单位选择,V 选中行,
ctrl + v
选择每一行相同位置的连续字符
插入模式下的
Move Arount
j, k, h, l
gj, gk(折行文本)
单词操作
w/W
移动到下个单词开头/单词含标点e/E
移动到下个单词结尾/单词含标点b/B
移动到上个单词开头/单词含标点ge/gE
移动到上个单词结尾/单词含标点dw/W
删除一个单词/单词含标 点,可搭配数字使用dt{char}
delete untild$/0
删除到行尾/首r, c, s
, replace, change(c(a)w 删除一个单词并进入插入模式,ct" 删除 “” 内容并进入插入模式), substitute(替换一个字符并进入插入模式)
行内操作
0/^
移动到行首/行首非空白符$/g_
移动到行尾/行尾非空白字符f{char}
行间搜索,快速跳转,;
跳转到下一个,,
向前查找F{char}
反向搜索t{char}
跳转到目标字符的前一个字符,快速跳转,;/n
跳转到下一个,`
垂直移动
()
在句子中移动{}
在段落之间移动
页面操作
gg/G
移动到文件开头和结尾,ctrl + o
快速返回H/M/L
移动到当前页面 顶部/中间/底部 (Head/Middle/Lower)zt/zz/zb
屏幕光标在当前位置 居顶/居中/居底 (top, bottom)Ctrl + e/y
屏幕向 下/上 移动一行(保持光标不动)Ctrl + b/f
屏幕向 上/下 滚动一屏 back/forwardCtrl + u/d
屏幕向 上/下 滚动半屏 up/down
其他
gd
跳转到局部定义gD
跳转到全局定义
Search/Replace
/
或者?
可以进行查找,后面输入需要查找的内容n/N
跳转到下一个/上一个匹配的位置
除了可以查找,还可以进行替换
1 | :[range]s[ubstitute]/{pattern}/{string}/[flags] |
Multiple File
buffer 指打开的一个文件的内存缓冲区,vim 打开一个文件后会加载文件内容到缓冲区,之后的修改都是针对内存中的缓冲区,并不会直接保存到文件
- :w 保存
- :ls 列举当前缓冲区
- :b n 跳转到第 n 个缓冲区
- :bpre :bnext :bfirst :blast
- :b buffer_name 加上 tab 补全跳转
窗口是 buffer 可视化的分割区域
一个窗口可以分割成多个窗口,每个窗口也可以打开不同缓冲区
- <ctrl +w> s 水平分割, 或 :sp
- <ctrl +w> v 垂直分割,或 :vs
- <ctrl +w> h/j/k/l
- <ctrl +w> w 窗口间循环切换
- <ctrl +w> h/j/k/L 将当前窗口移动到 左/… 边,交换
- <c-w>= 使所有窗口等宽、登高
- <c-w>_ 最大化活动窗口的高度
- <c-w>| 最大化活动窗口的宽度
tab 可以组织窗口为一个工作区,可以理解为虚拟桌面,比如可以一个 tab 用来编辑 go,一个用来编辑 html
Text Object
\[number\]\<command\>\[text object\]
- number 表示次数
- command 表示命令,如 d(elete), c(hange), y(yank)
- text object 是要操作的文本对象,比如 w(单词), s(句子), p(段落)
例子
- viw 选中单词(v visual 模式,i inner); vip 选中段落
- viw 选中单词包括后面的空格(v visual 模式,a around)
- 3yiw 复制三个个单词,yy 复制一行
Register
在 vim 中,将复制、删除的内容暂时放在了寄存器中,如果不指定,内容默认放在了 “无名寄存器”,通过 "{register} 前缀可以指定寄存器,不指定默认使用无名寄存器
- normal 模设计下 y(yank), p(put), d, p
- yiw 复制一个单词,yy 复制一行
- insert 模式
1 | "ayiw 复制一个单词到寄存器 a 中 |
Macro
macro 可以看成是一系列命令的集合,我们可以使用宏“录制”一系列操作,然后用于“回放”,即将一系列命令用在多行文本上
normal 模式下
- q 录制,q 结束录制
- q{register} 选择要保存的寄存器,把录制的命令保持在其中
- @{register} 回放寄存器中保持的一系列命令
eg. 给多行 url 连接加上双引号
1 | qa # 开始录制 |
1 | VG |
Config
1 | set number |
可以在 command-line mode 下 :h option-list
查看可配置的选项
自定义映射
map
基本映射,指 normal 模式下的映射。unmap
取消映射nmap/vmap/imap
,如:vmap \ U
在 visual 下将选中文本转换为大写。存在递归映射nnoremap/vnoremap/inoremap
非递归映射
1 | let mapleader=';' # 定义 ; 为 Leader 键 |
还可以自定义 vimscript 函数、配置插件,现在还不会…
Vim 操作太多了,等用到了再记录…
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 crwen!
评论