Practice make perfect

Vim 从入门到放弃

键盘推荐

  • hhkb
  • poker2

插入

i 光标前 a光标后 o 下一行

I行首 A行位 O上一行

快速删除

(插入模式下)

Ctrl + h 删除上一个字符

Ctrl + w 删除上一个单词

Ctrl + u 删除光标前到行首

(正常模式下)

x 删除一个字符

daw 删除一个单词,包括空格, diw 不包括空格

dd 删除行

dt{char} 删除到char前的字符

di{char} 删除 {} '' "" () 内内容

快速修改

r 替换一个字符 R 持续替换

s 删除当前字母并进入插入模式 S 删除整行进入插入模式

c 加动作(与d相同)删除并进入插入模式 C 删除当前光标后到行尾进入插入模式

查询

/ ? 前向 后向搜索 n/N 下一个/上一个

*/# 当前单词前向/后向匹配

模式切换

Ctrl + [ insert 切 normal

gi 快速跳转到最后一次编辑的地方进入插入模式

多文件操作

分屏

:vs 竖分屏 :sp 横分屏 可直接跟文件名分屏打开

<=> <Ctrl + w>v <Ctrl + w>s

:q退出当前分屏

<Ctrl + w>

  • w 窗口循环切换
  • h j k l 切换到 左下上右 窗口
  • H J K L 窗口位置交换
  • = 所有窗口等宽等高
  • _ 最大化活动窗口高度
  • | 最大化活动窗口宽度

buffer

:e filename 打开新缓冲区

:ls 列出缓冲区 :b n 跳转到第n个缓冲区

:bpre :bnext :bfirst :blast

b buffer_name tab补全

tab (不常用)

:tab[dit] {filename} 新标签页打开 {filename}`

<Ctrl + w> T 当前窗口移动到新标签页

:tabc[lose] 关闭当前标签页所有窗口

:tabo[nly] 只保留活动标签页,关闭其他标签页

:tabn[ext] {N} 切换到编号为 {N} 的标签页 普通模式下 {N}gt

:tabn[ext] 切换到下一标签页 gt

:tabp[revious] 切换到上一标签页 gT

替换

:[range]s[ubstitute]/{pattern}/{string}/[flags]

  • range 范围 例如 10,20 表示 10-20行,%表示全部
  • pattern 替换模式,string 替换后文本
    • 正则 如\<foo\> 匹配单词 foo
  • flags 替换标志
    • g 全部执行
    • c 可以确认或拒绝
    • n 查询匹配次数

% s/foo/bar/g 全局替换

选中

v 选择字母

V 选中行

Ctrl + v 选择块

选中后

d 删除 y 复制

:normal {command} 执行normal命令
u 小写
U 大写

格式

:set nu 设置行号

:syntax on 语法高亮

:hls 高亮搜索结果

:set incsearch 实时高亮搜索结果

:set autoindent 自动缩进

:set paste :set nopaste 粘贴保留缩进(no前自动缩进会失效)

:set clipboard=unnamed 将剪贴板设为系统剪贴板

移动

w/W 下一个单词开头e/E 下一个单词尾

b/B 上一个单词开头

大写 以空白符分割算一个

f{char} 跳转到 char 字符 ;下一个 , 上一个

t{char}跳转到 char 字符前一个字符

F{char} 从后往前搜索

0 行首第一个字符 ^ 第一个非空白符

$行尾 g_ 行尾非空白符

() 句子移动 {}区块启动

gg/G 文件开头/结尾 Ctrl + o 快速返回

H/M/L 文件开头/中间/结尾

Ctrl + u/f 上下翻页 zz 屏幕居中

撤销与重做

u 撤销
Ctrl + r 重做

text object

单词、句子、段落

[number] [text object]

  • number 次数
  • command 命令 如 d,c,y,v
  • text object 文本对象 单词w 句子s 段落p
    • [i/a] [w/W|s/S|p/P] i仅选中单词 不包括空格 a单词左右空格包括

复制粘贴

normal

  • y(yank ) 复制
    • yiw 复制一个单词
    • yy 复制一行
  • d 剪切
  • p(put) 粘贴

insert

Ctrl +c/v

寄存器

x/d/y内容放到 “无名寄存器”

"{register} 前缀指定寄存器,不指定默认无名寄存器,a-z寄存器

"0 复制专用寄存器 "+系统剪贴板 "%" 当前文件名 ".上次插入文本

:reg {register} 查看寄存器 {register} 内容

例子:

"ayiw 复制单词到 a 寄存器 "bdd删除当前行存入 b 寄存器

"ap 粘贴 a 寄存器

"+p" 粘贴系统剪贴板 格式不会乱

插入模式下 <Ctrl + r> {reg} 粘贴{reg}寄存器内容

文件

:e! 重新加载文件 且不保存

vim file1 file2 -O 打开两个文件

ZZ 保存退出

宏(macro)

录制操作,回放

normal

q{register} 选择保存的寄存器 开始录制

q结束录制

@{register} 回放寄存器中命令

代码补全

Ctrl + n Ctrl + p 补全单词

Ctrl + x Ctrl + f 补全文件名

Ctrl + x Ctrl + o 补全代码(开启文件类型检查,安装插件)

美化

配色

:colorscheme 显示当前配色

:colorscheme <Ctrl + d> 显示所有配色

:colorscheme 配色名 修改配色

Vim 配置

评论