############################################################################## # 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 :