基础操作

光标移动

# h表示往左,j表示往下,k表示往右,l表示往上
h,j,k,l

# 跳到单词的后面,小写包括标点
w, e, W, E

# 以单词为单位往前跳动光标,小写包含标点
b, B

# command is used to search through the current line
# 搜索本行
f/F

# 开启新的一行
O

# 一行的开始
^

# 一行的结尾
$

# 文档的第一行
gg

# 跳到文档的第N行或者最后一行
[N]G

# jump back to the previous (older) location
Ctrl+o

# to jump forward to the next location
Ctrl+i

# 光标移动至当前屏幕显示行的行首
H

# 光标移动至当前屏幕中间行的行首
M

# 光标移动至当前屏幕最后一行的行首
L

进去文件时指定行号

vim +418 test.txt

滚屏

Ctrl+f    #上一页
Ctrl+b    #下一页
Ctrl+e    #屏幕向下滚动一行
Ctrl+y    #屏幕向上滚动一行
Ctrl+d    #屏幕向下滚动半屏
Ctrl+u    #屏幕向上滚动半屏

插入模式

i    #插入到光标前面
I    #插入到行的开始位置
a    #插入到光标的后面
A    #插入到行的最后位置

o, O    #新开一行

Esc    #关闭插入模式

编辑模式

r    #在插入模式替换光标所在的一个字符
J    #合并下一行到上一行
s    #删除光标所在的一个字符, 光标还在当行
S    #删除光标所在的一行,光标还在当行,不同于dd
u    #撤销上一步操作

ctrl+r    #恢复上一步操作

.    #重复最后一个命令
~    #变换为大写

[N]>>    #一行或N行往右移动一个tab
[N]<<    #一行或N行往左移动一个tab



ctrl + s #冻结terminal
ctrl + q #解冻

视觉模式

v    #选中一个或多个字符
V    #选中一行

Ctrl+v #列块视觉模式

v + e #选中当前单词

列编辑模式

Ctrl+v  # 列选中模式
Shift+i # 选中模式插入
Esc     # 插入完成按两次退出

搜索

/pattern    #搜索(非插入模式)
?pattern    #往后搜索

n    #光标到达搜索结果的前一个目标
N    #光标到达搜索结果的后一个目标

:noh #取消搜索高亮

剪切和复制

dd    #删除一行
dw    #删除一个单词

x    #删除后一个字符
X    #删除前一个字符
D    #删除一行最后一个字符

[N]yy    #复制一行或者N行

yw    #复制一个单词
p     #粘贴

寄存器

:reg # 查看vim寄存器

# 查看是否支持系统剪贴板
vim --version | grep "clipboard"
# 不支持安装图形化vim
sudo apt-get install vim-gnome

"+yy  # 复制当前行到剪切板
"+p   # 将剪切板内容粘贴到光标后面
"ayy  # 复制当前行到寄存器 a
"ap   # 将寄存器 a 中的内容粘贴到光标后面

"*y   # 复制到系统粘贴版

窗口操作

:new
:split    #水平方向分割出一个窗口
:vsplit   #垂直方向分割出一个窗口
:vs       #垂直分割
:close    #关闭窗口
Ctrl+W    #切换窗口, h到左边窗口,j到下方窗口,k到上方窗口,l到右边窗口

缩进

= #自动缩进
>> #向右缩进
<< #向左缩进

替换和删除

# :s(substitute) 用以查找和替换字符串
:{作用范围}s/{目标}/{替换}/{替换标志}

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

# 当前行
:s/foo/bar/g

# 全文
:%s/foo/bar/g

# 选定的区域(按v可自动补全)
:'<,'>s/foo/bar/g

# c对替换进行确认,y替换,n不替换,a替换所有,q退出查找模式
:%s/foo/bar/gc

:%s/\s\+$//g #删除行尾多个空格

文件操作

# 打开多个文件
vim a.file b.file

# 打开文件
:e 文件名

# 打开文件管理
:Sex,:Vex,:Tex,:Ex

# 显示文件buffer
:ls

# 移动至要修改的文档
:b 文档名或编号

# 文件之间相互切换
Ctrl+6 下一个文件
:bn 下一个文件
:bp 上一个文件

# 编辑下一个文档
:n

额外功能

diff

# 对比文件
vimdiff file1 file2


zo #打开折叠 
zc #关闭折叠

dp #puts changes under the cursor into the other file
do #The change under the cursor is replaced

]c #jump to the new diff
[c #jump to the pervious diff

设置

设置鼠标

# 设置鼠标显示
:set mouse=a

# 取消鼠标显示
:set mouse=

设置行号

:set number #显示行号

全局配置文件

/etc/vim/vimrc
/etc/vimrc

插件推荐

# 文件侧边栏
NERDTree

# F3唤起
map <F2> :NERDTreeToggle<CR>

neovim

# 配置文件
~/.config/nvim/init.vim

# swap
~/.local/share/nvim/swap

# 插件管理工具 vim-plug
curl -fLo ~/.local/share/nvim/site/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

# 修改init.vim 其它插件的安装都要放在两个 call 命令之间
call plug#begin('~/.local/share/nvim/plugged')
# 插件
call plug#end()

# vim-plug 使用
安装插件
:PlugInstall
更新插件:
PlugUpdate
删除插件:
PlugClean (首先在 init.vim 中,注释掉该插件,然后打开 Nvim, 使用 :PlugClean 命令清除该插件)
查看插件状态:
PlugStatus
升级 vim-plug:
:PlugUpgrade

# 文件管理器插件
Plug 'scrooloose/nerdtree'

# 内置terminal
:terminal

# 水平方向打开terminal
vnew term://bash

# 垂直方向打开terminal
new term://bash

# 输入模式
i

# 退出terminal输入模式
<Ctrl+\><Ctrl+N>

# 录制宏

# 在normal模式下输入qa(a, b, c是指寄存器名称)开始录制
qa
# 结束宏录制。
q

# 运行宏
@a

# 7次执行宏
7@a