[TOC]
文件指令
- vim -on/-On
分屏
- ctrl + w / s
- :sp fil
分屏切换
- ctrl + w +
- ctrl + w+ h/j/k/l
- ctrl + w + H/J/K/L
关闭分屏
- ctrl + w + c/q
退出
- :w
- :w!
- :w file
- :q!
- :qa!
- :wq = :x
- :e file
- :e!
- :saveas file1
- :bn/bp
- ZZ, ZQ
进入插入模式
- 前: i, I
- 后: a, A
- 上/下首: o, O
- 删除: s, S
- 删除单词: cw
- 复制 <C-r>{register} 寄存器名字
- 自动完成 <C-p>{register}
- 运算 <C-r>={计算等式}
- 通过编码输入字符 <C-v>u{编制数字}, ga 获取字符的编码
- u{十六进制}
- {十进制}
命令模式
符号 | 含义 |
---|---|
. | 当前行 |
$ | 最后行 |
% | 文件所有行 = 1,$ |
/< html>/, /<\/html>/ | 选择区域内的文本, 支持相对偏移量, |
`m | 包含标记m的行 |
复制和移动
:t | =:copy=:co,6t. 将第6行复制到光标所在行的下一行:[range]coapy{address}, t6 当前行复制到6行下方, t$ 复制到文件末尾 |
:m | =:move :[range]move{address} |
执行普通命令
:`<,`>normal . | 区域重复指令 |
- 当不想覆盖默认寄存器中当前的内容时, 使用:t.来复制行(=yyp)
- 重复上次指令 @: 往后等于@@, <> :bprevious
Ex命令补全
<C-d> 显示所有可能的指令,<Tab>键自动补全
配置自动补全, 提供一个补全导航列表
(bash shell) set wildmode=longest,list
(zhs) set wildmenu ; set wildmode=full
- 正向遍历<Tab>, <C-n>, <Right>
- 反向便利<S-Tab>, <C-p>, <Left>
把当前单词插入到名利行
<C-r><C-w> 选中光标下的单词
<C-r><C-w> 选中光标下的字符串
打开vimrc 文件, 光标移动到一项设置上 输入:help <C-r><C-w> 可快速查看帮助文档
回溯历史指令
set history = 200 设置最大指令保存条数, 重启仍然有有效
/<C-n> <C-p>
q: 调出历史执行过的命令窗口 :q 关闭窗口 或者 <CR>
q/ 打开查找命令历史的命令行窗口
<C-f> 从命令行模式切换到命令行窗口
shell
vim 使用:shell启动交互式shell 推出时输入exit, 而neovim使用:te(:terminal)
<C-z> 挂起进程, jobs 查看挂起进程, fg唤醒 可以用于代替:shell命令
:r !{cmd} 将指令结果写入文本中
:w !sh 将内容传给sh命令作为标准输入
:w! sh 把内容写入到名为sh的文件中
2,$!sort -t ‘,’ -k2 使用外部sort指令, 以记录
,
为分隔, 然后使用-k2
指定第二个字段进行排序开始选择区域, 以
!
打头, 执行动作 自动形成:[range]!{filter}中的range
光标移动过
快捷键 | 功能 |
---|---|
$ | 行尾 |
w | next word |
W | former word |
b | the end of next word |
B | the end of former |
G | the end of file |
gg | the first of file |
H | 当前屏幕的第一行行首 |
- M 屏幕中间
- L 屏幕尾部
- zt 将当前行移动到屏幕最上方
- zz 当前行移动到屏幕中间
- zb 当前行移动到屏幕尾部
- % 匹配括号移动
- 和 # 匹配光标当前所在的单词, 移动到下一个匹配单词
翻页
- ctrl + f 前翻, ctrl + b 后翻页
- <C-u> 向上翻半页, <C-d> 向下翻半页
- <C-y> 向上滚动半页, 光标不变
- <C-o> 切换到插入-普通模式 zz 当前行显示在窗口中间
VIM 的复制, 粘贴, 删除
删除 d
- d
- dw
- dnw 删除n个单词
- dfa 删除到到下一个a的字符处(连同a一起删除)
- dnfa
- dd 删除行
- ndd 从光标开始删除n行
- d$ 删除到本行的末尾
- dH 删除屏幕显示第一行文本在行
- dG 删除到文本结束
复制 y
- yw, ynw 复制单词
- yfa, ynfa
- yy, nyy
- y$
- yH 复制到屏幕第一行行
粘贴 p
- p 光标后开始粘贴
- P 光标前开始粘贴
撤销和恢复
- u
- ctrl + r 恢复撤销操作
删除字符和替换
- x
- r 替换
- R 替换从光标开始以后的所有字符, <ESC>推出替换
大小写转换
- ~ 将光标下的字母改变大小写
- n~
- g~~ 行大小写反向
- gUU g
- guu , nguu
- gUw, guw 单词
案件操作 | 内容 |
---|---|
gUit | 下一个文本快大写 |
VIM 可视模式
可在可视模式中进行操作的 | 用途 |
---|---|
vi] | 选在括号中内容 |
va] | 包括括号选择 |
gv | 重选上次区域 |
<Esc>/ <C-[> | 回到到普通模式 |
v/V/<C-v> | 可视模式切换 |
o | 切换高亮区域区域的活动端 |
可视模式下v +
按键操作 | 内容 |
---|---|
it | 文本对象的特殊动作指令 |
U | 大写 |
Example
- 批量替换 Vr-
管理多个文件
- 打开多个文件 vim *.txt 打开所有后缀为txt的文件, ls 显示打开的文件, :bn (=:bnext) 切换到下一个缓冲区
- % 表示那个缓冲区在当前窗口, # 表示轮换文件
- :bp(=bprev), :bf (bfirst), :bl (blast)
- 跳到指定区域 buffer {n}
- :bufdo 命令允许在 :ls 列出的所有缓冲区上执行 Ex 指令(:h :bufo) =(argdo 实际中更实用)
- 删除缓冲区 :bd {N} , {n1},{n2} bd ( bd = bdelete)
用参数列表将缓冲区分组
- :args 查看缓冲区列表,(低配版:ls)
- :args{arglist} arglist 包括文件名, 通配符,shell命令等
- 添加文件 args {file1, file2}
- 正则表达式 :args *.* / */ .js
隐藏缓冲去
- :ls 以
h
标记的区域, 退出时会提示有没有保存的缓冲区- :e (:edit) 把磁盘内容读入缓冲区
- :w (:write) 缓冲区写入磁盘
将工作区拆分为窗口, 多窗口
:h window
- 快捷键 <C-w>s 水平拆分, <C-w>v垂直拆分 = :split/:vsplit {file}
- C-w q (=:q)关闭视窗
- C-w +/- 调整大小
块区域
ctrl + v
- 按下
I
或A
在区域前面或者后面输入内容.
代码补全
- ctrl + n 或 ctrl + p
配置
- 配置文件 vim ~/.vimrc
自带配置
- 高亮 :syntax on
- 行号 :set number
- 缩进(python) :set shiftwidth=4 softtabstop=4 expandtab
- 缩进 > , <, 2>
插件
代码补全(内置): ctrl + n
第三方插件管理: vim plug
NERDTree,
窗口切换: ctrl + w
批量添加前后缀
可视模式v
,V
,ctrl + v
, : normal A{前缀}
TIP
- 设置显示5行:set scrolloff = 5
- 光标回退(不管哪个文件就行) ctrl + o
- 打开文中地址 gf
- 保持时需要管理员权限 :w !sudo w tee % (%:当前目录, tee 将输入保存到文件中)
- <Esc> <C-[>
- <C-o>切换到插入-普通模式 zz 当前行显示在窗口中间