Vim 中文速查表

##############################################################################
# VIM CHEATSHEET (中文速查表)  -  by skywind (created on 2017/10/12)
# Version: 47, Last Modified: 2020/10/10 11:02
# https://github.com/skywind3000/awesome-cheatsheets
##############################################################################


##############################################################################
# 光标移动
##############################################################################

h                   光标左移,同 <Left> 键
j                   光标下移,同 <Down> 键
k                   光标上移,同 <Up> 键
l                   光标右移,同 <Right> 键
CTRL-F              下一页
CTRL-B              上一页
CTRL-U              上移半屏
CTRL-D              下移半屏
0                   跳到行首(是数字零,不是字母O),效用等同于 <Home> 键
^                   跳到从行首开始第一个非空白字符
$                   跳到行尾,效用等同于 <End> 键
gg                  跳到第一行,效用等同于 CTRL+<Home>
G                   跳到最后一行,效用等同于 CTRL+<End>
nG                  跳到第n行,比如 10G 是移动到第十行
:n                  跳到第n行,比如 :10<回车> 是移动到第十行
10%                 移动到文件 10% 处
15|                 移动到当前行的 15列
w                   跳到下一个单词开头 (word: 标点或空格分隔的单词)
W                   跳到下一个单词开头 (WORD: 空格分隔的单词)
e                   跳到下一个单词尾部 (word: 标点或空格分隔的单词)
E                   跳到下一个单词尾部 (WORD: 空格分隔的单词)
b                   上一个单词头 (word: 标点或空格分隔的单词)
B                   上一个单词头 (WORD: 空格分隔的单词)
ge                  上一个单词尾
)                   向前移动一个句子(句号分隔)
(                   向后移动一个句子(句号分隔)
}                   向前移动一个段落(空行分隔)
{                   向后移动一个段落(空行分隔)
<enter>             移动到下一行首个非空字符
+                   移动到下一行首个非空字符(同回车键)
-                   移动到上一行首个非空字符
H                   移动到屏幕上部
M                   移动到屏幕中部
L                   移动到屏幕下部
fx                  跳转到下一个为 x 的字符,2f/ 可以找到第二个斜杆
Fx                  跳转到上一个为 x 的字符
tx                  跳转到下一个为 x 的字符前
Tx                  跳转到上一个为 x 的字符前
;                   跳到下一个 f/t 搜索的结果
,                   跳到上一个 f/t 搜索的结果
<S-Left>            按住 SHIFT 按左键,向左移动一个单词
<S-Right>           按住 SHIFT 按右键,向右移动一个单词
<S-Up>              按住 SHIFT 按上键,向上翻页
<S-Down>            按住 SHIFT 按下键,向下翻页
gm                  移动到行中
gj                  光标下移一行(忽略自动换行)
gk                  光标上移一行(忽略自动换行)


##############################################################################
# 插入模式:进入退出
##############################################################################

i                   在光标处进入插入模式
I                   在行首进入插入模式
a                   在光标后进入插入模式
A                   在行尾进入插入模式
o                   在下一行插入新行并进入插入模式
O                   在上一行插入新行并进入插入模式
gi                  进入到上一次插入模式的位置
<ESC>               退出插入模式
CTRL-[              退出插入模式(同 ESC 等价,但更顺手)


##############################################################################
# INSERT MODE - 由 i, I, a, A, o, O 等命令进入插入模式后
##############################################################################

<Up>                光标向上移动
<Down>              光标向下移动
<Left>              光标向左移动
<Right>             光标向右移动
<S-Left>            按住 SHIFT 按左键,向左移动一个单词
<S-Right>           按住 SHIFT 按右键,向右移动一个单词
<S-Up>              按住 SHIFT 按上键,向上翻页
<S-Down>            按住 SHIFT 按下键,向下翻页
<PageUp>            上翻页
<PageDown>          下翻页
<Delete>            删除光标处字符
<BS>                Backspace 向后删除字符
<Home>              光标跳转行首
<End>               光标跳转行尾
CTRL-W              向前删除单词
CTRL-O              临时退出插入模式,执行单条命令又返回插入模式
CTRL-\ CTRL-O       临时退出插入模式(光标保持),执行单条命令又返回插入模式
CTRL-R 0            插入寄存器(内部 0号剪贴板)内容,CTRL-R 后可跟寄存器名
CTRL-R "            插入匿名寄存器内容,相当于插入模式下 p粘贴
CTRL-R =            插入表达式计算结果,等号后面跟表达式
CTRL-R :            插入上一次命令行命令
CTRL-R /            插入上一次搜索的关键字
CTRL-F              自动缩进
CTRL-U              删除当前行所有字符
CTRL-V {char}       插入非数字的字面量
CTRL-V {number}     插入三个数字代表的 ascii/unicode 字符
CTRL-V 065          插入 10进制 ascii 字符(两数字) 065 即 A字符
CTRL-V x41          插入 16进制 ascii 字符(三数字) x41 即 A字符
CTRL-V o101         插入  8进制 ascii 字符(三数字) o101 即 A字符
CTRL-V u1234        插入 16进制 unicode 字符(四数字)
CTRL-V U12345678    插入 16进制 unicode 字符(八数字)
CTRL-K {ch1} {ch2}  插入 digraph(见 :h digraph),快速输入日文或符号等
CTRL-D              文字向前缩进
CTRL-T              文字向后缩进


##############################################################################
# 文本编辑
##############################################################################

r                   替换当前字符
R                   进入替换模式,直至 ESC 离开
s                   替换字符(删除光标处字符,并进入插入模式,前可接数量)
S                   替换行(删除当前行,并进入插入模式,前可接数量)
vaa                 选取函数参数(包括逗号分隔)
yia                 复制函数参数
yaa                 复制函数参数(包括逗号分隔)


##############################################################################
# 网络资源
##############################################################################

最新版本            https://github.com/vim/vim   
Windows 最新版      https://github.com/vim/vim-win32-installer/releases
插件浏览            http://vimawesome.com
reddit              https://www.reddit.com/r/vim/
正确设置 ALT/BS 键  https://skywind.me/blog/archives/2021
视频教程            http://vimcasts.org/
中文帮助            http://vimcdoc.sourceforge.net/doc/help.html
中文版入门到精通    https://github.com/wsdjeg/vim-galore-zh_cn
五分钟脚本入门      https://skywind.me/blog/archives/2193
脚本精通            http://learnvimscriptthehardway.stevelosh.com/
中文脚本帮助        vimcdoc.sourceforge.net/doc/eval.html
十六年使用经验      http://zzapper.co.uk/vimtips.html
配色方案            http://vimcolors.com/


##############################################################################
# TIPS
##############################################################################

- 永远不要用 CTRL-C 代替 <ESC> 完全不同的含义,容易错误中断运行的后台脚本
- 很多人使用 CTRL-[ 代替 <ESC>,左手小指 CTRL,右手小指 [ 熟练后很方便
- 某些终端中使用 Vim 8 内嵌终端如看到奇怪字符,使用 :set t_RS= t_SH= 解决
- 某些终端中使用 Vim 8.2+ 会看到一些奇怪字符,使用 :set t_TI= t_TE= 解决
- 某些终端中使用 NeoVim 如看到奇怪字符,使用 :set guicursor= 解决
- 使用 MS-Terminal 如果进入 Vim/NVim 会默认替换模式设置 :set t_u7= 解决
- 多使用 ciw, ci[, ci", ci( 以及 diw, di[, di", di( 命令来快速改写/删除文本
- 在行内左右移动光标时,多使用w b e或W B E,而不是h l或方向键,这样会快很多
- SHIFT 相当于移动加速键, w b e 移动光标很慢,但是 W B E 走的很快
- 自己要善于总结新技巧,比如移动到行首非空字符时用 0w 命令比 ^ 命令更容易输入
- 在空白行使用 dip 命令可以删除所有临近的空白行,viw 可以选择连续空白
- 缩进时使用 >8j  >}  <ap  >ap  =i}  == 会方便很多
- 插入模式下,当你发现一个单词写错了,应该多用 CTRL-W 这比 <BackSpace> 快
- y d c 命令可以很好结合 f t 和 /X 比如 dt) 和 y/end<cr>
- c d x 命令会自动填充寄存器 "1 到 "9 , y 命令会自动填充 "0 寄存器
- 用 v 命令选择文本时,可以用 o 掉头选择,有时很有用
- 写文章时,可以写一段代码块,然后选中后执行 :!python 代码块就会被替换成结果
- 搜索后经常使用 :nohl 来消除高亮,使用很频繁,可以 map 到 <BackSpace> 上
- 搜索时可以用 CTRL-R CTRL-W 插入光标下的单词,命令模式也能这么用
- 映射按键时,应该默认使用 noremap ,只有特别需要的时候使用 map
- 当你觉得做某事很低效时,你应该停下来,u u u u 然后思考正确的高效方式来完成
- 用 y复制文本后,命令模式中 CTRL-R 然后按双引号 0 可以插入之前复制内容
- 某些情况下 Vim 绘制高亮慢,滚屏刷新慢可以试试 set re=1 使用老的正则引擎
- Windows 下的 GVim 可以设置 set rop=type:directx,renmode:5 增强显示


##############################################################################
# References
##############################################################################

https://github.com/groenewege/vimrc/blob/master/vim_cheat_sheet.txt
http://blog.g-design.net/post/4789778607/vim-cheat-sheet
http://www.keyxl.com/aaa8263/290/VIM-keyboard-shortcuts.htm
http://jmcpherson.org/editing.html
http://www.fprintf.net/vimCheatSheet.html
http://www.ouyaoxiazai.com/article/24/654.html
http://bbs.it-home.org/thread-80794-1-1.html
http://www.lpfrx.com/wp-content/uploads/2008/09/vi.jpg
http://michael.peopleofhonoronly.com/vim/
https://github.com/hobbestigrou/vimtips-fortune/blob/master/fortunes/vimtips
https://github.com/glts/vim-cottidie/blob/master/autoload/cottidie/tips



# vim: set ts=4 sw=4 tw=0 noet noautoindent fdm=manual :