vim
基础操作
光标移动
# 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