-
## 2-11 vim补全大法
### 什么是补全
- 补全是根据当前环境上下文有编辑器【猜】你想输入的东西
- 比如补全一个单词、文件名、或者代码中的函数名、变量名
- vim中提供了多种补全功能,还有由插件拓展功能实现代码补全
### vim中常见的补全
vim中有很多种补全方式
| 命令 | 补全类型 |
| ------ | ---------- |
| \<C-n> | 补全关键字 |
|\<C-x>\<C-n>|当前缓冲区关键字|
|\<C-x>\<C-i>|包含文件关键字|
|\<C-x>\<C-j>|标签关键字|
|\<C-x>\<C-k>|字典查找|
|\<C-x>\<C-l>|整行补全|
|\<C-x>\<C-f>|文件名补全|
|\<C-x><C-0>|全能(Omin)补全|
### 常见的三种补全类型
- 使用Ctrl+n和Ctrl+p补全单词
- 使用Ctrl+x,Ctrl+f补全文件名
- 使用Ctrl+x,Ctrl+o补全代码,需要开启文件类型检查,安装插件
查看全部 -
## 2-10 vim宏(macro)
### 从需求说起
批量处理文本
### 什么是vim宏(macro)
- 宏可以看成是一系列命令的集合
- 我们可以使用宏【录制】一系列操作,然后用于回放
- 宏可以方便的把一下列命令用在多行文本上
### 如何使用宏
- vim使用q来录制,同时也也是q结束录制
- 使用q{register}选择要保存的寄存器,把录制的命令保存其中
- 使用@{register}回放寄存器中保存的一系列命令
### 用宏解决刚才的问题
- 献给一行加上双引号,让后在回放到其他行
- 我们先使用q开始录制,给一行加上双引号,之后使用q退出
- 在剩下的所有行中回放录制的宏
查看全部 -
## 2-7 vim多文件操作
### Buffer,Window,Tab
- Buffer是指打开的一个文件的内存缓冲区
- 窗口是Buffer可视化的分割区域
- Tab可以组织窗口位一个工作区
#### Buffer
#####Buffer-什么是缓冲区?
- vim打开一个文件后会加载文件内容到缓冲区
- 之后的修改都是针对内存着的缓冲区,并不会直接保存到文件
- 直到我们执行:w(write)的时候才会把修改内容写入到文件里
##### Buffer切换
- 使用:ls会列举当前缓冲区,然后使用:b n跳的第n个缓冲区
- :bpre :bnext :bfirst :blast
- 或者用:b buffer_name加上tab补全来跳转
#### Window窗口
窗口是可视化的分割区域
- 一个缓冲区可以分割成多个窗口,每个窗口也可以打开不同缓冲区
- <Ctrl+w>s水平分割,<Ctrl+w>v垂直分割。或者:sp和:vs
- 每个窗口可以继续无限分割
|命令|用途|
|---|---|
|<Ctrl-w>w|在窗口键来回切换|
|h|切换到左边窗口|
|j|切换到下边窗口|
|k|切换到上边窗口|
|l|切换到右边窗口|
大写时可以移动窗口
#### Tab(标签页)将窗口分组
Tab是可以容纳一系列窗口的容器(:h tabpage)
- vim 的Tab和其他编辑器不太一样,可以想象成Linux的虚拟桌面
- 比如一个Tab全用来编辑Python文件,一个Tab全是HTML文件
- 相比窗口,Tab一般用的比较少,Tab太多,管理起来也太麻烦
查看全部 -
## vim如何搜索替换
### vim替换命令
substitute命令允许我们查找并且替换掉文本,并且支持正则表达式
- `:[range]s[ubstiute]/{pattern}/{string}/[flags]`
- range表示范围比如:10,20表示10-20行,%表示全部
- pattern要替换的模式,string是替换后的文本
#### 替换标志位
flags有几个常用的标志
- g(global)表示全局范围内执行
- c(confirm)表示确认,可以确认或者拒绝
- n(number)报告匹配到的次数而不替换,可以用来查询匹配次数
查看全部 -
## Vim快速增产改查
### Vim增加字符
- 进入插入模式
- 使用a/i/o进入插入模式
### Vim快速删除
如何快速删除一个字符或者单词?
- Vim在Normal模式下使用x快速删除一个字符
- 使用d(delete)配合文本对象快速删除一个单词daw(d around word),diw(删除一行,不包括空白字符)
- dd删除一行,`dt(`快速删除括号里的内容
- d$快速删除到行尾,d0快速删除到行首
- d和x都可以搭配数字来执行多次
- 使用v可以选择删除
### Vim快速修改
- 常用有三个,r(replace),c(change),s(substitute)
- Normal模式下使用r可以替换一个字符。s替换并进入插入模式
- R不断替换,Esc退出,S删除整行并进入插入模式
- 使用c配合文本对象,我们可以快速修改,cw删除单词插入,ct"删除引号中的内容
### Vim查询
- 使用/或者?进行前向或者反向搜索
- 使用n/N跳转到下一个或上一个匹配
- 使用*或者#进行当前单词的前向和后项匹配
查看全部 -
使用a/i/o进入插入模式;
ctrl+h 删除上一个字符
ctrl+w 删除上一个单词
ctrl+u 删除 当前行
使用 ctrl+c代替Esc(但是可能会中断某些插件),所以推荐使用 ctrl+[
gi 快速跳转到最后一次编辑的地方并进入插入模式
查看全部 -
1. 输入模式下快速纠错(终端下也有类似的快捷键) • ctrl+h 删除上一个字符 • ctrl+w 删除上一个单词 • ctrl+u 删除当前行 • ctrl+a (终端) 快速移动到开头 • ctrl+e (终端)快速移动到结尾 • ctrl+f (终端)光标后移 • ctrl+b (终端)光标迁移 2. 快速切换 insert 和 normal 模式 insert -> normal: ctrl+c 或者 ctrl+[ gi: normal 模式切换到 insert 模式,且到上次编辑的地方查看全部
-
1. 输入模式下快速纠错(终端下也有类似的快捷键)
ctrl+h 删除上一个字符
ctrl+w 删除上一个单词
ctrl+u 删除当前行
ctrl+a (终端) 快速移动到开头
ctrl+e (终端)快速移动到结尾
ctrl+f (终端)光标后移
ctrl+b (终端)光标迁移
2. 快速切换 insert 和 normal 模式
insert -> normal: ctrl+c 或者 ctrl+[
gi: normal 模式切换到 insert 模式,且到上次编辑的地方
查看全部 -
i 在当前光标前插入
a 在当前光标后面插入
o 在当前光标的下一行插入
I 在当前行的第一个插入
A 在当前行的后面插入
O 在当前行的上面插入
查看全部 -
dw 删除单词光标及之后的
daw 删除单词包括之后的空格
diw 删除单词
dt
r 替换一个字符 R 一直替换
c aw 带空格 iw不带空格 并insert
s 删除当前字符并insert S 删除当前行并insert
f 行内查找 并跳转
/ 全文查找 n下一个 N上一个
* 当前单词的下一个 # 当前单词的上一个
查看全部 -
w W : next word
e E : the end of next word
b B : back
f{} t{} ; next ' last
H 屏幕开头
M 屏幕中间
L 屏幕结尾
G gg
zz
查看全部 -
这里安装IndentLine需要注意一下,如果当前使用的vim在编译时不包含conceal这个feature,则IndentLine这个插件无法使用,具体参考
https://github.com/Yggdroot/indentLine/issues/203#issuecomment-302397103
我目前找到,貌似需要使用neovim(老师使用的就是这种,所以这里可以成功显示缩进的线),或者使用macvim(我使用这种,brew install macvim 后,在~/.bash_profile中加入 alias vim = ‘mvim -v -f’),具体参考以下SO:
https://stackoverflow.com/questions/51300345/vim-how-to-let-vim-support-conceal-on-macos
查看全部 -
vim快速删除
查看全部 -
vim的文本对象(text object)
[number]<command>[text object]
number表示次数,command是命令, d(elete), c(hange), y(ank)
text object是要操作的文本对象, 比如单词w,句子s,段落p
主要使用的有iw, inner word, 如果使用viw,那么v进入选择模式,iw选择当前单词
aw 表示around word,不但会选中当前单词,还会包含当前单词之后的空格。
查看全部 -
normal模式下:
vim增加字符
a/i/o A/I/O
vim快速删除
x快速删除一个字符
d可以配合文本对象快速删除一个单词
dw删除整个单词包括空格
daw删除整个单词包括空格
diw不包括空格
dd删除一行
dt) 删除直到)的内容
di)可以删除整个括号内的内容
数字加命令表示多次执行
vim快速修改
r(replace)替换一个字符
s(substitute)替换并进入插入模式
c(change)和d的用法差不多
vim查询
使用/或者?进行前向或者反向搜索
使用n/N跳转到下一个或者上一个匹配
使用*或者#进行当前单词的前向和后向匹配
查看全部
举报