1.start
vim 命令
vim
自动补全
tab
模式切换
i - insert
esc - normal mode
: - command-line mode
退出
:q, :quit
:w, :write
:wq
:q!
帮助
:h
打开文件
vim file1 file2 file3 ...
vim +<cmd1> +<cmd2> file - 打开文件并执行命令
vim -c <cmd1> -c <cmd2> file - 和上述命令一样
打开多窗口
vim -o - 打开两个水平窗口
vim -O - 打开两个垂直窗口
vim -o5 file1 file2 - 水平打开五个,前两个打开指定文件
挂起
Ctrl-Z, :stop, :suspend
恢复:fg
2.Buffers, Windows, and Tabs
buffers
首先要在.vimrc文件中添加set hidden。否则每次切换buffer都不会保存内容。
如果没有.vimrc文件,要创建他:在vim中输入:h vimrc查看要创建的位置,创建完成之后在文件中添加set hidden,输入:w保存,然后输入:source %执行当前文件。
每打开一个文件,就会创建一个buffer
:buffers - 查看所有的buffer
:bnext, Crtl-i
:bprevious, Ctrl-o
:buffer file, :buffer num, - 切换buffer
:bdelete file/num - 删除
:qall, :qall!, :wqall - 关闭所有buffer
windows
:split file, :vsplit file, :new file - 创建新的窗口
Ctrl-w v - 创建垂直切分窗口
Ctrl-w s - 创建水平切分窗口
Ctrl-w h/j/k/l - 切换窗口
Ctrl-w c - 关闭窗口
Ctrl-w o - 关闭其他窗口
Tabs
是多个窗口的集合,但是当关闭tab时,文件仍然存在buffer中,没有被关闭。
:tabnew file - 创建新的tab
:tabclose
:tabnext, gt, 3gt
:tabprevious, gT
:tablast
:tabfirst
vim -p file1 file2 - 打开多个tab
3.搜索文件
vim中打开并编辑文件
:edit file
:edit *<tab> - 当前文件夹所有文件
:edit *.txt <tab> - txt文件
:edit **/*.md <tab> - 当前目录及子目录下的所有md文件
edit也可以打开目录(使用的是vim的内置文件管理器netrw)
:find 搜索
find在path中搜索文件,而edit并不是。
path
:set path? - 查看path
:set path+={path} - 添加path(例如::set path+=/Users/ltp/**find会在ltp及其子目录下查找),也可以把该命令加到vimrc中,方便以后修改
:grep 搜索
在文件中搜索。
:vim /{patten}/ file - vim内置的grep,是:vimgrep的缩写
quickfix
:vim指令使用的是
quickfix操作,因此可以用quickfix指令查看搜索结果::copen Open the quickfix window :cclose Close the quickfix window :cl 列出所有匹配 :cn 下一个匹配 :cnf 下一个文件 :cp 上一个匹配 :cpf 上一个文件1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
* :vim会把搜到的结果写入内存,匹配较多时会耗费大量时间
`:grep "{patten}" file` - 使用bash的grep指令进行搜索,也是使用`quickfix`指令查看搜索结果
## netrw 管理文件
进入netrw:
* `vim {path}` - 外部进入netrw
* `:edit {path}` - vim内进入netrw
* `:Explore` - 不用指定path,打开当前所在目录
* `:Sexplore` - 在屏幕上半部分进入netrw
* `:Vexplore` - 在屏幕右半部分进入netrw
`%` - 创建文件
`d` - 创建目录
`R` - 重命名目录
`D` - 删除目录
## Fzf & ripGrep
用第三方插件进行搜索效率更高
### 安装
* 下载 [fzf](https://github.com/junegunn/fzf) 和 [ripgrep](https://github.com/BurntSushi/ripgrep)
* 告诉fzf默认使用ripgrep进行搜索
在`.zshrc`文件中加入下面代码:
```bash
if type rg &> /dev/null; then
export FZF_DEFAULT_COMMAND='rg --files'
export FZF_DEFAULT_OPTS='-m'
fi
安装vim插件管理器vim-plug,并按照教程在
.vimrc中配置好。在
.vimrc中加入1
2Plug 'junegunn/fzf.vim'
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }:so $MYVIMSC重新加载vimrc:PlugInstall安装vimrc中加入的插件
Fzf符号
^is a prefix exact match. To search for a phrase starting with “welcome”:^welcome.$is a suffix exact match. To search for a phrase ending with “my friends”:friends$.'is an exact match. To search for the phrase “welcome my friends”:'welcome my friends.|is an “or” match. To search for either “friends” or “foes”:friends | foes.!is an inverse match. To search for phrase containing “welcome” and not “friends”:welcome !friends
查找文件
:Files
可以给该指令设置快捷键:在.vimrc中加入nnoremap <silent> <C-f> :Files<CR>,之后即可使用Ctrl-f
设置其他快捷键:
1 | nnoremap <silent> <Leader>b :Buffers<CR> |
用rg代替grep
上面讲过,在vim中使用:grep调用的是外部的bash指令,我们可以手动替换为rg
在vimrc中加入:set grepprg=rg\ --vimgrep\ --smart-case\ --follow
在多个文件中搜索和替换
:grep "pizza"- 收缩有pizza的文件,:cfdo %s/pizza/donut/g | update- 将quickfix中的文件执行替换操作并保存
手动选择要替换的文件:
- 清空buffer:退出vim或者执行
:%bd | e#- (%bd删除所有的bufer,e#打开之前的文件) - 执行
:Files - 使用
选择需要替换的文件 - 执行
:bufdo %s/pizza/donut/g | update- 将buffer中的文件执行替换操作并保存