Vim

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

:tabnextgt, 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
    2
    Plug '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

fzf的其他指令

设置其他快捷键:

1
2
3
4
5
6
7
8
9
10
nnoremap <silent> <Leader>b :Buffers<CR>
nnoremap <silent> <C-f> :Files<CR>
nnoremap <silent> <Leader>f :Rg<CR>
nnoremap <silent> <Leader>/ :BLines<CR>
nnoremap <silent> <Leader>' :Marks<CR>
nnoremap <silent> <Leader>g :Commits<CR>
nnoremap <silent> <Leader>H :Helptags<CR>
nnoremap <silent> <Leader>hh :History<CR>
nnoremap <silent> <Leader>h: :History:<CR>
nnoremap <silent> <Leader>h/ :History/<CR>

用rg代替grep

上面讲过,在vim中使用:grep调用的是外部的bash指令,我们可以手动替换为rg

在vimrc中加入:set grepprg=rg\ --vimgrep\ --smart-case\ --follow

在多个文件中搜索和替换

  1. :grep "pizza" - 收缩有pizza的文件,
  2. :cfdo %s/pizza/donut/g | update - 将quickfix中的文件执行替换操作并保存

手动选择要替换的文件:

  1. 清空buffer:退出vim或者执行:%bd | e# - (%bd 删除所有的bufer, e# 打开之前的文件)
  2. 执行:Files
  3. 使用选择需要替换的文件
  4. 执行:bufdo %s/pizza/donut/g | update - 将buffer中的文件执行替换操作并保存
0%