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中的文件执行替换操作并保存