Skip to the content.

vim

建议初学者读一读 简明 VIM 练级攻略 会助你更高效的学习 vim
给程序员的VIM速查卡
vim 大冒险 以游戏的方式学习 vim
无插件VIM编程技巧

:help 帮助文档

基础

快捷键

i 进入模式(insert)
u 回溯之前的操作 Esc (ctrl+c/ctrl+[)退出编辑

进入插入模式:

a append 在当前字母的后面插入
i insert 在当前字母的前面插入
o open line bello 在下面新建一行插入

A ppend after line 在当前行的最后插入
I insert before line 在当前行的最前插入
O ppend a line above 在上新建一行插入

退出模式:

:q 退出当前文件
:wq 保存退出当前文件

命令模式:

文件操作:

:set nu 显示行号
:vs 竖分屏
:sp 横分屏
:e! 重新加载文件(不保存当前更改)

查找:

:% s 查找/搜索

visual(可视)模式:

v 进入可视模式
V 选择行
ctrl+v 选择块
d 删除
y 复制
p 粘贴

编辑

ctrl+h 删除上一个字符
crel+w 删除上一个单词
crrl+u 删除当前行

以上三个快捷键在终端中通用

终端中的其它一些快捷键:
ctrl+a 将光标移动到行首
crel+e 将光标移动到行尾
crel+b 向前移动光标
crrl+f 向后移动光标

gi 快速跳转到最近编辑的位置,并进入编辑模式

移动

增删改查

配置

:set hls - hight light search 高亮搜索结果
:set incsearch - incrament search 增量搜索

搜索替换

range 范围,pattern 搜索(替换)模式,string 替换后的文本,flags 标志

多文件操作

文件相关的概念

:e file_name 打开文件(同时打开多个文件)

窗口切换(切换窗口的命令都是采用ctrl+w(window 作为前缀))

命令 用途
ctrl+w>w 在窗口间循环切换
ctrl+w>h 切换到左边的窗口
ctrl+w>j 切换到下边的窗口
ctrl+w>k 切换到上边的窗口
ctrl+w>l 切换到右边的窗口

移动窗口(切换窗口的命令都是采用ctrl+w(window 作为前缀))

命令 用途
ctrl+w>W 将当前窗口在窗口间循环移动
ctrl+w>H 将当前窗口移动到左边的窗口
ctrl+w>J 将当前窗口移动到下边的窗口
ctrl+w>K 将当前窗口移动到上边的窗口
ctrl+w>L 将当前窗口移动到右边的窗口

重排窗口大小(:h window-resize 查看帮助文档)

命令 用途
ctrl+w>= 使所有窗口等宽等高
ctrl+w>_ 最大化活动窗口的高度
ctrl+w>| 最大化活动窗口的宽度
[n]ctrl+w>_ 将动窗口的高度设置为 n 行
[n]ctrl+w>| 将动窗口的宽度设置为 n 行

可以组织窗口为一个工作区(:h tabpage) 查看文档

命令 用途
:tabnew file_name 新建一个标签页
:tabe[dit] file_name 在新标签中打开文件
ctrl+w>T 将当前窗口移动到新标签页
:tabc[lose] 关闭当前标签及其所有窗口
:tabo[nly] 关闭除当前窗口外的所有其它窗口

tab 标签切换

Ex 命令 普通模式 用途
:tabn[ext] {N} {N}gt 切换到编号为 N 的标签页
tabn[ext] gt 切换到下一个标签页
tabp[revious] gT 切换到上一个标签页

文本对象(text-object)

iw(inner word)。如果键入 viw 命令,那么首先将进入选择模式,然后 iw 将选中当前
aw(a word),它不但会选中当前单词,还会包含当前单词之后的空格。

以下实例中的 [] 表示作用范围:
iw This is a [test] sentence.
aw This is a [test ]sentence.
iW This is a […test…) sentence.
aW This is a […test… jsentence.
is ..sentence. [This is a sentence.] This..
as ..sentence.[This is a sentence. ]This..End of previous paragraph.
ip [This is a paragraph. It has two sentences.
The next
End of previous paragraph.
ap [This is a paragraph. It has two sentences.
]The next

复制粘贴与寄存器

复制粘贴

一个坑
在 vimrc 中设置 autoindent, 粘贴 python 代码缩进错乱
解决办法:(3种选其一)

  1. :set paste:set nopaste
  2. "+p 使用系统剪贴板
  3. :set clipboard=unnamed 与 2 本周相同,可完美解决此问题

寄存器

常见寄存器

:set clipboard=unnamed 将默认寄存器设置为系统剪贴板,此时就可以直接复制粘贴系统剪贴板的内容。如使用 y 会将内容直接粘贴到系统剪贴板,p 会直接从系统姐铁板粘贴内容

示例: "ayiw 复制一个单词到寄存器 a "dbd 删除当前行到寄存器 b "ap 粘贴寄存器 a 中的内容

宏(macro)

宏是一系列命令的集合,可以使用宏“录制”一些列操作,然后用于”回放“,宏可以非常方便的用于多行文本,录制的宏会保存在寄存器中

在view 模式下使用 normal 下的命令: :normal [命令]

vim 中的补全

补全一般有三种类型:

  1. ctrl+n, ctrl+p 补全单词
  2. ctrl+x, ctrl+f 补全文件名
  3. ctrl+x, ctrl+o 补全代码,需开启文件类型检测,安装插件
命令 补全类型
ctrl+n 普通关键字
ctrl+x, ctrl+n 当前缓冲区关键字
ctrl+x, ctrl+i 包含文件关键字
ctrl+x, ctrl+j 标签文字关键字
ctrl+x, ctrl+k 字典查找
ctrl+x, ctrl+l 整行补全
ctrl+x, ctrl+f 文件名补全
ctrl+x, ctrl+o 全能(Omni) 补全

补全时若有多个匹配项可使用 ctrl+n(上一个) ctrl+p(下一个) 进行选择
:r! echo % 插入当前文件路径
:r! echo %:p 插入当前文件完整路径

vim 配色

获取配色:
rafi/awesome-vim-colorschemes
vimcolorschemes
(flazz/vim-colorschemes)(https://github.com/flazz/vim-colorschemes)

配置

vim 配置文件

1. 常用设置

" 常用设置
" (vimrc 中 " 表示注释)
" 设置行号
set number
" 设置语法高亮
syntax on
" 设置主题
colorscheme hybrid
" 按 F2 进入粘贴模式
set pastetoggle=<F2>
" 高亮搜索
set hlsearch
" 设置折叠方式
set foldmethod=indent

2. vim 中的映射

插件使用

vim 插件管理器:vim-plug(推荐), vundle, Pathogen, Dein.Vim, volt 等

vim 插件

vim 基本插件

vim 美化

vim 文件目录

vim 编辑

vim 代码编辑

vim git

寻找插件

VimAwesome

与时俱进

与 vim 相关的工具

vim 开源配置


参考资料:

fatih/vim-go
wiki
vim-go Tutorial
fatih/vim-go-tutorial
《笨办法学Vimscript》
Practical VIM 《PracticalVim》 | Github | zh-cn VimAwesome
rafi/vim-config
Vim,第三只手

vim 快捷键

vi-vim-cheat-sheet-sch.gif

来源:http://blog.ngedit.com/vi-vim-cheat-sheet-sch.gif


鸣谢:玩转Vim 从放弃到爱不释手 - 慕课网