上古神器~Vim

401 阅读4分钟

Vim 是 UNIX 文本编辑器 Vi 的加强版本,加入了更多特性来帮助编辑源代码。Vim 的部分增强功能包括文件比较(vimdiff),语法高亮,全面的帮助系统,本地脚本(Vimscript),和便于选择的可视化模式。 Vim 专注于键盘操作,它并不是像 nano 或 pico 一样的简单编辑器。Vim 需要花时间来学习,并值得花上更多的时间来掌握。

【Vim预警】:Vim学习成本很陡

image.png

Vim大全

ProVim

ProVim界面

ProVim配置

image.png

image.png

image.png

ProVim常用命令

F系列快捷键

F系列快捷键说明
F1帮助文档
F2回到启动页
F3打开目录
F4打开Tag
F5打开UndoTree
F6新建终端
F7gcc编译
F8gdb调试
F9

Coc插件系列快捷键

Coc快捷键说明
[g下一个
]g上一个
gd上一个
gy上一个
gi上一个
gr上一个
K上一个
rn
\f
\a
\ac
\qf
Ctrl+s
space+a
space+e
space+c
space+o
space+s
space+j
space+k
space+p

ultisnips插件系列快捷键

ultisnips快捷键说明
tab
Ctrl+b
Ctrl+z

Git插件系列快捷键

Git快捷键说明
\gg

fzf插件系列快捷键

fzf快捷键说明
+tab查询快捷键

airline插件系列快捷键

airline快捷键说明

Vim常用命令

  • 展开折叠代码,zi
  • 跳转到第一行,:1 gg
  • 跳转到最后一行 :$ shift+g

多窗口使用技巧

打开多个窗口

  • new name.txt
  • sp(lit) name.txt
  • vsp(lit) name.txt

关闭多窗口

  • q!,w!,x 真正退出
  • close 暂时关闭窗口,内容还在缓存中
  • tabc 关闭当前窗口
  • tabo 关闭所有窗口

窗口切换

  • ctrl + w + j/k 上下切换
  • ctrl + w + 方向键 上下左右切换
  • ctrl + w (双击) 依次切换

窗口大小调整

  • ctrl + w + 纵向扩大,行数增加
  • ctrl + w - 纵向缩小,行数减小
  • res(ize) num 显示行数调整为num行
  • res(ize) + num 增加num行
  • res(ize) - num 减少num行
  • vertical res(ize) num 指定当前窗口为num列
  • vertical res(ize)+num 把当前窗口增加num列
  • vertical res(ize)-num 把当前窗口减少num列

给窗口重命名

  • f file

vi打开多个窗口

  • vi a b c

文件浏览

  • :Ex 开启目录浏览器,可以浏览当前目录下的所有文件,并可以选择
  • :Sex 水平分割当前窗口,并在一个窗口中开启目录浏览器
  • :ls 显示当前buffer情况

vi和shell切换

  • :shell 可以在不关闭vi的情况下切换到shell命令行
  • :exit 从shell回到vi

快速跳转

  • %
  • [m
  • [M
  • ]m
  • ]M
  • [{
  • ]}
  • [(
  • ])
  • gd
  • gD

vim编辑常用快捷键

复制粘贴剪切

  • yy 拷贝某一行的内容
  • dd 剪切某一行的内容
  • p 粘贴
  • v + 光标移动选中一些,松开v,然后按下y => 即拷贝选中的内容
  • v + 光标移动选中一些,松开v,然后按下d => 即剪切选中的内容
  • ctrl + v 列模式,移动光标可以选择列的内容
  • dd可以看成是删除单独行,v + 光标移动选中内容再按下d可以看成是删除多行内容。

查找与替换

  • 全局查找

    • 在normal模式下按下/即可进入查找模式,输入要查找的字符串并按下回车。 Vim会跳转到第一个匹配。按下n查找下一个,按下N查找上一个
    • 在查找模式中加入\c表示大小写不敏感查找,\C表示大小写敏感查找。例如: /foo\c /Foo\C
  • 查找当前单词

      • 查找当前光标所在的单词
    • g* 可查找光标所在单词的字符序列,每次出现前后字符无要求
  • 查找和替换

    • :s(substitute)命令用来查找和替换字符串

    • :{作用范围}s/{目标}/{替换}/{替换标志}

      • eg :%s/foo/bar/g会在全局范围(%)查找foo并替换为bar,所有出现都会被替换(g)

      • 作用范围

        • 当前行 :s/foo/bar/g
        • 全文 :%s/foo/bar/g
        • 选区 :'<,'>s/foo/bar/g在Visual模式下选择区域后输入:,Vim即可自动补全为 :'<,'>
        • 2-11行 :5,12s/foo/bar/g
        • 当前行.与接下来两行+2 :.,+2s/foo/bar/g
      • 替换标志

        • 空替换标志 表示只替换从光标位置开始,目标的第一次出现
        • g,表示全局global替换(即替换目标的所有出现)
        • i表示大小写不敏感查找,I表示大小写敏感
        • c表示需要确认,例如全局查找"foo"替换为"bar"并且需要确认

代码折叠

  • set foldenable 启动折叠

  • :set foldmethod=manual (Manual(手工折叠)、Indent(缩进折叠)、Marker(标记折叠)和Syntax(语法折叠))

  • za 打开关闭当前的折叠

  • zc 关闭当前打开的折叠

  • zo 打开当前的折叠

  • zm 关闭所有的折叠

  • zM 关闭所有的折叠及其嵌套的折叠

  • zr 打开所有折叠

  • zR 打开所有折叠及其嵌套的折叠

  • zd 删除当前的折叠

  • zE 删除所有的折叠

  • zj 移动至下一个折叠

  • zk 移动至上一个折叠

  • zn 禁用折叠

  • zN 启用折叠

  • Manual Fold

    • zf
    • zfa(
  • Indent Fold

  • Syntax Fold

  • Marker Fold

会话

  • :mksession 保存当前会话
  • :mkVimball
  • :mkexrc
  • mkspell
  • mkview
  • mkvimrc