zxc的自留地

About Me

[读书笔记]Pragmatic Vim

May 23, 2022

基础操作

操作 说明 模式
>G 缩近到最后一行 Normal
c 删除指定的文本,并切换到插入模式 Normal
f{char} 在一行上查找下一个 char Normal
F{char} 在一行上查找上一个 char Normal
; 重复查找向后 f{char}\F{char}命令 Normal
, 重复查找向前 f{char}\F{char}命令 Normal
* 高亮当前单词 Normal
<C-a> 加上数值 Normal
<C-x> 减去数值 Normal
<C-h> 删除前一个字符 Insert
<C-w> 删除前一个单词 Insert
<C-u> 删至行首 Insert
zz 重绘制屏幕,使当前行居中展示 Normal
yt, 将内容复制到专用的寄存器 Normal
<C-r>0 从 yt,寄存器拷贝内容 Normal
<C-r>=6*30 插入模式下,可以用来计算,先按然后在按=,然后输入表达式,最后按回车 Insert
ga 显示字符编码 Normal
v 激活面向字符的可视模式 Normal
V 激活面向行的可视模式 Normal
<C-v> 激活面向列块的可视模式 Normal
gv 重选上次高亮区域 Normal
o 切换高亮选区的活动端 Visual
gUit 大写文本对象(u 小写) Normal
:read !{cmd} 将 cmd 执行的结果放到当前缓冲区里 Ex
:write !{cmd} or :write ! {cmd} 把当前缓冲区的内容当作 cmd 的标准输入 Ex
:write! sh 将当前缓冲区的内容到 sh 的文件中 Ex
<C-^> 切换%,#(%当前文件,#上一个文件)文件的缓冲文件 Normal
:wa 保存所有 Normal
:qa 放弃所有修改 Normal
:e 将文件内容读入缓冲区 Normal
:edit %:h 相对于活动文件目录打开一个文件 Normal
!mkdir -p %:h 保存文件时路径不存在 Normal
:w !sudo tee %>/dev/null 以超级用户权限保存文件 Normal
gj 移动一个屏幕行 Normal
e 正向移动到当前单词/下一单词的结尾 Normal
W 跳到下一个字符串的开头 Normal
F{char} 反向移动到上一个{char}所在之处 Normal
t{char} 正向移动到下一个{char}所在之处的前一个字符 Normal
a 跟)}>' 一堆符号及符号包围的内容//Normal 下需要搭配 y、d、c 使用 Visual/Normal
i 跟)}>' 符号包围的内容 Visual/Normal
at/it 一对标签/一对标签内部内容 Visual/Normal
m{a-zA-Z} 标记,小写当前缓存区可见、大写全局可见 Normal
`{a-zA-Z} 跳转到标记的地方 Normal
`. 上次修改的地方 Normal
`` 当前文件中上次跳转动作之前的位置 Normal
[count]G 跳转到 count 行号 Normal
/word 查找单词 Normal
的反操作 Normal
% 在配对的括号中跳转 Normal
(/) 跳转到上一句/下一句的开头 Normal
{/} 跳转到上一段/下一段的开头 Normal

Ex 命令

range 可以写成 n,m 表示范围,也可以写成 n+/-m

address 一般是行号,也可以是下面表格里的符号

命令 用途
[range]delete [x] 删除指定范围内的行到寄存器 X 中
[range]copy [x] 拷贝指定范围内的行到寄存器 X 中
[range]copy {address} 拷贝指定范围的行到{addres 行号}的行下
[range]move {address} 移动指定范围的行到{addres 行号}的行下
[range]normal {commands} 对范围内的每一行,执行 normal 模式下的 commands

Ex 命令下的符号

符号 地址
0 虚拟行,文件第一行上方
1 文件第一行
$ 文件最后一行
% 全部行等同于:1,$

Tips

多行插入

\<C-v>
c
input somethind
<ESC>

or

:%normal i//

在长短不一的行上添加文本

\<C-v>jj$
A;
<ESC>

or

A;<ESC>
jVG
:'<'>normal .

or

%normal A;

寄存器

无名寄存器("")

删除内容时会自动保存到该寄存器

\<C-r>"

复制专用寄存器("0)

只有复制才会覆盖寄存器的内容

"0P

or

<C-r>0

常用操作

yiw
"0p

or

yiw
ve
P

有名寄存器("a - "z)

使用小写字母会覆盖原有内容,大写字母会追加原有内容

"ayiw // 拷贝到"a寄存器
"aP  // 从"a寄存器拷贝

黑洞寄存器("_d)

删除时不会保存内容到无名寄存器

系统剪切板("+)

"+p // 从剪切板粘贴到 vim 内部

1、录制(q[a-z]) 2、一系列操作 3、结束录制(q) 4、{m}@[a-z]

搜索

\v \V

\v 使用正则表达式

\V 原义开关

替换

简单替换

:s/old/new # 替换第一个
:s/old/new/g # 替换当前行
:%s/old/new/g # 替换所有行
:%s/old/new/gc # 替换前确认

重复上一次命令

:s/old/new/g
g& # 在整个文件范围内执行替换

重用上次的查找模式

:%s/v'(([^']|'\w)+'/"\1")/g

equal to

/v'(([^']|'\w)+)'
:%s//"\1"/g

多个文件执行查找替换

/Pragmatic\ze Vim
:vimgrep // **/*.txt
:cfdo %s//Pragmatic/gc
:cfdo update

equal to

/Pragmatic\ze Vim
:vimgrep // **/*.txt
:cfdo %s//Pragmatic/gc | update

global 命令

:g|v/re/p g|v 表示 global|vglobal re 表示正则 p 表示动作

删除和方向删除

删除

/\v\<\/?\w+> # 指定搜索项
:g//d

方向删除

:v/href/d # 删除不包含href的所有行

收集 TODO

qa
;g/TODO/yank A
:reg a

TODO bufdo argdo

Quickfix

命令 功能
:copen 打开 Quickfix 列表
:cprev 跳转到上一项
:cnext 跳转到下一项
:cfirst 跳转到第一项
:clast 跳转到最后一项
:cnfile 跳转到上一个文件的最后一项
:cpfile 跳转到上一个文件的最后一项

自动补全

出发自动补全

命令 补全数据来源
<C-n> 普通关键字
<C-x> 当前缓冲区关键字
<C-x> 文件名补全
<C-x> 全能(Omni)补全

与自动补全的弹出式菜单进行交互

命令 功能
<C-x> 全能(Omni)补全
<C-n> 匹配下一个来自补全列表的匹配项
<C-p> 匹配上一个来自补全列表的匹配项
<C-e> 取消自动补全

拼写检查

触发检查 :set spell

命令 功能
z= 展示更正建议
]s 跳转到下一处拼写错误
[s 跳转到上一处拼写错误