命令行快捷键
ctrl+a 移动到行首
ctrl+e 移动到行尾
ctrl+b 往前移动
ctrl+f 往后移动
ctrl+h 删除上一个字符
ctrl+w 删除上一个单词
ctrl+u 删除当前行
ctrl+pprev上一个命令
ctrl+nnext下一个命令
vim a.txt b.txt -O同时打开两个文件
shift+z+z保存退出
Normal模式
/ word 查找word关键字
ctrl+c/ctrl+[ 替代ESC,快速切换到Normal模式
zt将当前行移到最顶端
zz将当前行移到中间
移动大法
字符移动
hjkl ←↓↑→「字符移动」
单词移动
w/W 移到下个单词开头「单词移动」
e/E 移到下个单词结尾「单词移动」
b/B 移到上个单词开头「单词移动」
行间搜索移动
f{ char} / F{ char} 移到char字符上; 下一个, 上一个「行间搜索移动」
t{ char} / T{ char} 移到char的前一个字符; 下一个, 上一个「行间搜索移动」
水平移动
0移到行首「水平移动」
$移到行尾「水平移动」
页面移动
gg移到文件开始 G移到文件结束 ctrl+o快速返回「页面移动」
H/M/L移到屏幕所显示文件的头部Head、中部Middle、尾部Lower「页面移动」
ctrl+u/ctrl+f上下翻页 「页面移动」
zz将当前行显示在屏幕中间「页面移动」
快速删除
x删除字符 { 4} x删除4个字符
dw删除单词
dd删除一行 { 2} dd删除2行
dt{ ; } delete to . . . 删除「当前位置」到「; 」的内容
d0删除「当前位置」到「行首」的内容
d$删除「当前位置」到「行尾」的内容
uundo 撤回
ctrl+r前进
快速修改
r = replace, c = change, s = substitute
r{ char} 快速替换字符
R{ char} 快速替换字符并可以连续替换
s/4s删除当前字符/ 删除4个字符-- >编辑模式
S删除当前行-- >编辑模式
cwchange word 删除当前单词-- >编辑模式
C删除「当前字符」到「行尾」的内容-- >编辑模式
ct{ ; } change to . . . 删除「当前字符」到「; 」的内容-- >编辑模式
快速查询
/ { word} 向下搜索,n上一个N下一个
?{ word} 向下搜索,n上一个N下一个
* |
文本对象
[number] <command>[text object]
number:次数
command:命令,d[delete] c[change] y[yank]
text object:文本对象,w[ 单词] s[ 句子] p[ 段落]
2dw删除后面的2个单词
2cw修改后面的2个单词
di{ "}删除" 里面的内容
ci{ "}修改" 里面的内容
复制粘贴
dd->jk->p删除一行- >移动- >粘贴
dw->hjkl->p删除单词- >移动- >粘贴
yy->hjkl->p复制一行- >移动- >粘贴
yiw->hjkl->p复制单词- >移动- >粘贴
Insert模式
i = insert, a = append, o = open a line below
i在光标的前面插入 I在当前行首插入
a在光标的后面插入 A在当前行尾插入
o在光标的下一行插入 O在光标的上一行插入
ctrl+h 删除上一个字符
ctrl+w 删除上一个单词
ctrl+u 删除当前行
gi 快速回到上次编辑的地方
代码补全
ctrl+n/ctrl+p代码补全
ctrl+x+f文件名补全
:r! echo % :p插入当前文件全路径
Command模式
:进入命令模式
:wq 保存退出
:set nu 设置行号
:vs 横分屏 :sp 竖分屏 :q 退出
:syntax on 语法高亮
:help { c} 查找关于c的命令用法
:set hls搜索结果高亮
:set incsearch增量搜索,边搜索边高亮
:e!重新加载并不保存当前文件
:source ~/ . vimrc刷新vimrc配置
:qa退出所有窗口
替换命令
:[range] s/{ pattern} / { string} / [flags]
range:10, 20表示10-20行,% 表示全部
pattern:搜索的文本
string:替换的文本
flags:g全局,c替换前需确认,n查询匹配的次数
:% s/java/kotlin/g 全局替换 java -- > kotlin
:% s/java// n查询java全局有多少个匹配
:% s/\<java\>/ kotlin/g精确匹配替换,用<>,而不是把包含的单词也替换了
多文件操作
缓冲区Buffer
:ls 列出所有缓冲区
:b { n} 跳转到第n个缓冲区
:b { buffer_name} 跳转指定的缓冲区
:e { b. txt} 打开指定的buffer
窗口Window
ctrl+w+v左右分割
:vs左右分割
ctrl+w+s上下分割
:sp 上下分割
:vs/sp { a. txt} 以「左右| 上下」分割打开某个文件
:q退出窗口
ctrl+w+w窗口间循环切换
ctrl+w+h/j/k/l窗口←↓↑→切换
ctrl+w+H/J/K/L移动「当前窗口」到「←↓↑→」
标签页Tab
:tabnew { a. java} 新建标签页并打开a. java
gt标签页之间切换
Visual模式
v 进入Visual模式
V 选择一行
ctrl+v 选择方块
y 复制
p 粘贴
V->jk->:normal I
V->jk->:normal x取消多行注释
v->hjkl->u/U大小写转换
快速删除
d 删除
v->hjkl->d/xhjkl选择块 -- > 删除块「批量删除」
V->jk->d/x选择一行 -- > jk选择哪几行 -- > 删除行「批量删除」
文本对象
v->iw选中单词 inner word
v->aw选中单词+ 空格 around word
v->i{ "}选中" 里面的内容
寄存器
Vim操作的是寄存器而不是系统剪贴板
默认使用的是无名寄存器
"0复制专用寄存器
" + 系统剪贴板,有时cmd+v复制代码格式错乱的情况下,使用"+ 就不会格式错乱
Normal模式
"{a}->yy复制一行到a寄存器中
" { b} - >dd删除一行并复制到b寄存器中
"{ a} - >p粘贴a寄存器的内容
命令模式
:reg { a} 查看a寄存器的内容
:set clipboard=unnamed可以直接「复制粘贴」到系统剪贴板,而不用"+ 再使用「复制粘贴」
编辑模式
ctrl+r->+ 粘贴系统剪贴板内容,等同于cmd+v
宏macro
在Normal模式下录制
q录制或停止录制
q{ a} - > { i} - > 编辑 - > esc - > q - > V - > jk/G - > :normal @a
1、录制
q{ a} - > { i} - > 编辑 - > esc - > q
①录制命令到a寄存器- >②Insert模式- >③编辑一行- >④Normal模式- >⑤停止录制
2、回放
V - > jk/G - > :normal @a
①Visual模式- >②选中需要修改的行- >③回放a寄存器的内容
不使用宏完成行首和行尾加"
V -> G -> :normal I" - > ctrl+p( :normal A")
选择一行->全选->行首加" - >执行上个命令并修改( 行尾加")
映射
nmap/vmap/imap分别对Normal/Visual/Insert模式下分别有效
nnoremap:Normal模式的非递归映射
vnoremap:Visual模式的非递归映射
inoremap:Insert模式的非递归映射
:map 快捷键 命令
:map - x按- 就会删除字符
:map <space> viw按空格选中单词
:map <c-d> dd按ctrl+d删除一行
:imap <c-d> <Esc>ddiInsert模式下按ctrl+d删除一行
:vmap \ UVisual模式下选中的文本u/U转换大小写
let mapleader=',' 定义leader键,
inoremap jj <Esc>\`^Insert模式下按jj切换到Normal模式
inoremap <leader>w <Esc>:w<cr>Insert模式下按, w保存文件
noremap <leader>w :w<cr>Normal模式下按, w保存文件
插件
推荐vim-plug插件
. vimrc中配置
call plug
Plug 'mhinz/vim-startify'
call plug
PlugInstall 插件名安装插件
插件推荐
1、GitHub搜索
2、https:/ / vimawesome. com
Plug 'mhinz/vim-startify'
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'
Plug 'yggdroot/indentline'
Plug 'wong/vim-hybrid'
Plug 'scrooloose/nerdtree'
Plug 'ctrlpvim/ctrlp.vim'
Plug 'easymotion/vim-easymotion'
Plug 'tpope/vim-surround'
Plug 'junegunn/fzf'
Plug 'junegunn/fzf.vim'