From 6eadd9a0dd4ccc7bd655a11d2b5f20c9b1b484ee Mon Sep 17 00:00:00 2001 From: skywind3000 Date: Sun, 11 Mar 2018 23:49:13 +0800 Subject: [PATCH] update tips --- editors/vim.txt | 130 +++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 107 insertions(+), 23 deletions(-) diff --git a/editors/vim.txt b/editors/vim.txt index 245eb31..33b3afd 100644 --- a/editors/vim.txt +++ b/editors/vim.txt @@ -1,6 +1,6 @@ ############################################################################## # VIM CHEATSHEET (中文速查表) - by skywind (created on 2017/10/12) -# Version: 26, Last Modified: 2018/03/09 15:50 +# Version: 29, Last Modified: 2018/03/11 23:49 # https://github.com/skywind3000/awesome-cheatsheets ############################################################################## @@ -43,7 +43,7 @@ ge 上一个单词尾 H 移动到屏幕上部 M 移动到屏幕中部 L 移动到屏幕下部 -fx 跳转到下一个为 x 的字符 +fx 跳转到下一个为 x 的字符,2f/ 可以找到第二个斜杆 Fx 跳转到上一个为 x 的字符 tx 跳转到下一个为 x 的字符前 Tx 跳转到上一个为 x 的字符前 @@ -94,8 +94,11 @@ CTRL-[ 退出插入模式(同 ESC 等价,但更顺手) CTRL-W 向后删除单词 CTRL-O 临时退出插入模式,执行单条命令又返回插入模式 CTRL-\ CTRL-O 临时退出插入模式(光标保持),执行单条命令又返回插入模式 -CTRL-R 插入寄存器(内部剪贴板编号)内容 -CTRL-R = 插入表达式计算结果 +CTRL-R 0 插入寄存器(内部 0号剪贴板)内容,CTRL-R 后可跟寄存器名 +CTRL-R " 插入匿名寄存器内容,相当于插入模式下 p粘贴 +CTRL-R = 插入表达式计算结果,等号后面跟表达式 +CTRL-R : 插入上一次命令行命令 +CTRL-R / 插入上一次搜索的关键字 CTRL-F 自动缩进 CTRL-U 删除当前行所有字符 CTRL-V {char} 插入非数字的字面量 @@ -164,6 +167,8 @@ J 链接多行为一行 g~iw 替换当前单词的大小写 gUiw 将单词转成大写 guiw 将当前单词转成小写 +guu 全行转为小写 +gUU 全行转为大写 << 减少缩进 >> 增加缩进 == 自动缩进 @@ -245,6 +250,27 @@ N 向相反方向执行上一次搜索 :%s/p1/p2/gc 将当前文件中全替换p1为p2,并且每处询问你是否替换 :10,20s/p1/p2/g 将第10到20行中所有p1替换为p2 :%s/1\\2\/3/123/g 将“1\2/3” 替换为 “123”(特殊字符使用反斜杠标注) +:%s/\r//g 删除 DOS 换行符 ^M + + +############################################################################## +# VISUAL MODE - 由 v, V, CTRL-V 进入的可视模式 +############################################################################## + +> 增加缩进 +< 减少缩进 +d 删除高亮选中的文字 +x 删除高亮选中的文字 +c 改写文字,即删除高亮选中的文字并进入插入模式 +s 改写文字,即删除高亮选中的文字并进入插入模式 +y 拷贝文字 +~ 转换大小写 +o 跳转到标记区的另外一端 +O 跳转到标记块的另外一端 +u 标记区转换为小写 +U 标记区转换为大写 +g CTRL-G 显示所选择区域的统计信息 + 退出可视模式 ############################################################################## @@ -255,7 +281,9 @@ CTRL-O 跳转到上一个位置 CTRL-I 跳转到下一个位置 CTRL-^ 跳转到 alternate file (当前窗口的上一个文件) % 跳转到 {} () [] 的匹配 -gd 跳转到定义 +gd 跳转到局部定义(光标下的单词的定义) +gD 跳转到全局定义(光标下的单词的定义) +gf 打开名称为光标下文件名的文件 [[ 跳转到上一个顶层函数(比如C语言以大括号分隔) ]] 跳转到下一个顶层函数(比如C语言以大括号分隔) [m 跳转到上一个成员函数 @@ -270,23 +298,6 @@ gd 跳转到定义 ]/ 跳转到 C注释结尾 -############################################################################## -# VISUAL MODE - 由 v, V, CTRL-V 进入的可视模式 -############################################################################## - -> 增加缩进 -< 减少缩进 -d 删除文字 -c 改写文字 -y 拷贝文字 -~ 转换大小写 -o 跳转到标记区的另外一端 -O 跳转到标记块的另外一端 -u 标记区转换为小写 -U 标记区转换为大写 - 退出可视模式 - - ############################################################################## # 文件操作 ############################################################################## @@ -303,7 +314,6 @@ U 标记区转换为大写 :wa 保存所有文件 :cd 切换 Vim 当前路径 :pwd 显示 Vim 当前路径 -gf 打开名称为光标下文件名的文件 :new 打开一个新的窗口编辑新文件 :enew 在当前窗口创建新文件 :vnew 在左右切分的新窗口中编辑新文件 @@ -359,6 +369,8 @@ CTRL-W R 旋转窗口 CTRL-W T 将当前窗口移到新的标签页中 CTRL-W P 跳转到预览窗口 CTRL-W z 关闭预览窗口 +CTRL-W _ 纵向最大化当前窗口 +CTRL-W | 横向最大化当前窗口 ############################################################################## @@ -373,6 +385,12 @@ CTRL-W z 关闭预览窗口 :tabo 关闭其他标签页 :tabn n 切换到第n个标签页,比如 :tabn 3 切换到第三个标签页 :tabm n 标签移动 +:tabfirst 切换到第一个标签页 +:tablast 切换到最后一个标签页 +:tab help 在标签页打开帮助 +:tab drop 如果文件已被其他标签页和窗口打开则跳过去,否则新标签打开 +:tab split 在新的标签页中打开当前窗口里的文件 +:tab ball 将缓存中所有文件用标签页打开 ngt 切换到第n个标签页,比如 2gt 将会切换到第二个标签页 gt 下一个标签页 gT 上一个标签页 @@ -388,6 +406,10 @@ ma 保存当前位置到书签 a ,书签名可以用 a-z( `a 跳转到书签 a所在位置 `. 跳转到上一次编辑的行 'A 跳转到全文书签 A +[' 跳转到上一个书签 +]' 跳转到下一个书签 +'< 跳到上次可视模式选择区域的开始 +'> 跳到上次可视模式选择区域的结束 ############################################################################## @@ -406,6 +428,7 @@ ma 保存当前位置到书签 a ,书签名可以用 a-z( :set ttm=100 设置终端按键检测超时为100毫秒 :set term=? 设置终端类型,比如常见的 xterm :set ignorecase 设置搜索是否忽略大小写 +:set smartcase 智能大小写,默认忽略大小写,除非搜索内容里包含大写字母 :set list 设置显示制表符和换行符 :set number 设置显示行号,禁止显示行号可以用 :set nonumber :set paste 进入粘贴模式(粘贴时禁用缩进等影响格式的东西) @@ -427,6 +450,7 @@ ma 保存当前位置到书签 a ,书签名可以用 a-z( :h tutor 入门文档 :h quickref 快速帮助 :h index 查询 Vim 所有键盘命令定义 +:h summary 帮助你更好的使用内置帮助系统 :h CTRL-H 查询普通模式下 CTRL-H 是干什么的 :h i_CTRL-H 查询插入模式下 CTRL-H 是干什么的 :h i_ 查询插入模式下方向键上是干什么的 @@ -437,7 +461,10 @@ ma 保存当前位置到书签 a ,书签名可以用 a-z( :h tabpage.txt 标签页使用帮助 :h +timers 显示对 +timers 特性的帮助 :h :! 查看如何运行外部命令 +:h tips 查看 Vim 内置的常用技巧文档 :h set-termcap 查看如何设置按键扫描码 +:viusage NORMAL 模式帮助 +:exusage EX 命令帮助 :version 显示当前 Vim 的版本号和特性 @@ -494,6 +521,8 @@ zE 删除所有折叠 zf 创建代码折叠 zF 指定行数创建折叠 zi 切换折叠 +zm 所有代码折叠一层 +zr 所有代码打开一层 zM 折叠所有代码,设置 foldlevel=0,设置 foldenable zR 打开所有代码,设置 foldlevel 为最大值 zn 折叠 none,重置 foldenable 并打开所有代码 @@ -519,10 +548,13 @@ q 结束录制宏 CTRL-E 向上卷屏 CTRL-Y 向下卷屏 CTRL-G 显示正在编辑的文件名,以及大小和位置信息 +g CTRL-G 显示文件的:大小,字符数,单词数和行数,可视模式下也可用 zz 调整光标所在行到屏幕中央 zt 调整光标所在行到屏幕上部 zb 调整光标所在行到屏幕下部 ga 显示光标下字符的 ascii 码或者 unicode 编码 +g8 显示光标下字符的 utf-8 编码结果 +gi 回到上次进入插入的地方,并切换到插入模式 K 查询光标下单词的帮助 CTRL-PgUp 上个标签页,GVim OK,部分终端软件需设置对应键盘码 CTRL-PgDown 下个标签页,GVim OK,部分终端软件需设置对应键盘码 @@ -533,14 +565,19 @@ CTRL-PgDown 下个标签页,GVim OK,部分终端软件需设置对 :set termcap 查看会从终端接收什么以及会发送给终端什么命令 :set guicursor= 解决 SecureCRT/PenguiNet 中 NeoVim 局部奇怪字符问题 :set t_RS= t_SH= 解决 SecureCRT/PenguiNet 中 Vim8.0 终端功能奇怪字符 +:set fo+=a 开启文本段的实时自动格式化 :earlier 15m 回退到15分钟前的文件内容 :.!date 在当前窗口插入时间 :%!xxd 开始二进制编辑 :%!xxd -r 保存二进制编辑 :r !curl -sL {URL} 读取 url 内容添加到光标后 +:g/^\s*$/d 删除空行 +:g/green/d 删除所有包含 green 的行 +:v/green/d 删除所有不包含 green 的行 :g/gladiolli/# 搜索单词打印结果,并在结果前加上行号 :g/ab.*cd.*efg/# 搜索包含 ab,cd 和 efg 的行,打印结果以及行号 :v/./,/./-j 压缩空行 +:Man bash 在 Vim 中查看 man,先调用 :runtime! ftplugin/man.vim 激活 /fred\|joe 搜索 fred 或者 joe /\<\d\d\d\d\> 精确搜索四个数字 /^\n\{3} 搜索连续三个空行 @@ -640,6 +677,51 @@ reddit https://www.reddit.com/r/vim/ 十六使用经验 http://zzapper.co.uk/vimtips.html +############################################################################## +# TIPS +############################################################################## + +- 永远不要用 CTRL-C 代替 完全不同的含义,容易错误中断正在当前脚本 +- 很多人使用 CTRL-[ 代替 ,左右小指 CTRL,右手小指 [ 熟练后很方便 +- SecureCRT 中使用 Vim 8 内嵌终端如看到奇怪字符,使用 :set t_RS= t_SH= 解决 +- SecureCRT 中使用 NeoVim 如看到奇怪字符,使用 :set guicursor= 解决 +- * 和 # (以及 g*/g#)是十分重要的查找命令 +- 使用 @: 重复执行上一次 Ex 命令,比如 :nohl, @:, @:, @: +- SHIFT 相当于移动加速键, w b e 移动光标很慢,但是 W B E 走的很快 +- 自己要善于总结新技巧,比如移动到行首非空字符时用 0w 命令比 ^ 命令更容易输入 +- 在空白行使用 dip 命令可以删除所有临近的空白行 +- 在空白区使用 viw 可以选择所有空白字符 +- 缩进时使用 >8j >} 快 +- 插入模式下,CTRL-X CTRL-F 可以方便的补全当前目录的文件名 +- 插入模式下,可用 CTRL-V u 输入 unicode,如 u1234 输入16进制 unicoode +- 插入模式下,CTRL-R = 可以用来简单计算,比如 =12*3.5/10 会插入 4.2 +- 如果在插入模式下移动光标,那么就不能使用 . 来重复之前的插入了 +- y d c 命令可以很好结合 f t 和 /X 比如 dt) 和 y/end +- c d x 命令会自动填充寄存器 "1 到 "9 , y 命令会自动填充 "0 寄存器 +- 用 v 命令选择文本时,可以用 o 掉头选择,有时很有用 +- ca) 和 yi} 很容易记忆,但是他们等同于 cab yiB 后者很容易输入 +- 写文章时,可以写一段代码块,然后选中后执行 :!python 代码块就会被替换成结果 +- 搜索后经常使用 :nohl 来消除高亮,使用很频繁,可以 map 到 上 +- 搜索时可以用 CTRL-R CTRL-W 插入光标下的单词 +- Vim 有一千零一种移动光标的方法,有时候就连 H M L 也是很有用的 +- 不需要记忆上一次选择区域,'< 和 '> 可以跳到上次选择的开始和结束 +- 如需编辑同一个文件的不同地方,可以用 :vs 或者 :split 将文件分为两个窗口 +- 有六种方法来改变一个布尔设置: :set list nolist list! invlist list? list& +- 映射按键时,应该默认使用 noremap ,只有特别需要的时候使用 map +- 当你觉得做某事很低效时,你应该停下来,u u u u 然后思考正确的高效方式来完成 +- 用 y复制文本后,命令模式中 CTRL-R 然后按双引号 " 可以插入之前复制内容 +- 如果你想全屏阅读帮助的话,使用 :tab help 命令 +- 粘贴文本时应该思考下前后是否包含空格 +- :x 和 ZZ 命令和 :wq 类似,但是不会写入没有改变的文件,并且更快 +- 多阅读 :h index 学习新的快捷键,让你更加高效 +- Vim 帮助系统里有一个使用技巧集合,使用 :h tips 阅读 +- Windows 下的 GVim 可以用 CTRL-INSERT 和 SHIFT-INSERT 操作系统剪贴板 +- 思考题:知道下面控制代码 ^I ^M ^J ^[ ^H ^@ 分别代表什么意思么? + + ############################################################################## # References ############################################################################## @@ -653,6 +735,8 @@ 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 :