来源
https://www.imooc.com/learn/1129 一位大佬的免费课程,大家可以去看下.这是我做的一些笔记,用来在忘记一些操作时查询,排版可能存在一些问题,大家将就看吧.
下载与安装:
win下可以下载Gvim
进入vim
vim命令进入vim
vim不同模式下的操作:
-
普通模式(用vim打开文件时的默认模式)
水平移动: h(左)j(下)k(上)l(右)移动光标 数字0移动到当前行的第一个字符处,'^'跳转到第一个非空白字符处 '$'移动到行尾,g_移动到行尾的非空白字符处 垂直移动: '(' 和 ')' 在句子间移动 '{' 和 '}' 在段落间移动 可以使用 :help 来查看帮助文档 删除: x 快速删除一个字符 daw 删除一个单词,会删除跟在单词后面的空格 diw 删除一个单词,但不会删除跟在单词后面的空格 dd 删除当前行 dt + 字符 删除当前位置到指定字符之间的内容,包括当前位置,不包括指定字符 d$ 删除当前位置到行尾的字符,包括当前位置 d0 删除当前位置到行首的字符,不包括当前位置 x 和 d 都可配合数字或可视模式使用(x是删除字符,d是删除行) 修改: r 将当前光标所在位置的字符替换为之后输入的字符 R 不断替换当前位置即之后的文本,类似于键盘上 ins 的作用,覆盖,可按 esc 退出该状态 s 删除当前光标所在位置的字符并进入插入模式,光标位置即为删除字符的位置 S 整行删除并进入插入模式 caw 删除当前单词,并进入插入模式 C 删除当前光标及之后的内容,并进入插入模式 Ct + 字符 删除当前位置到指定字符之间的内容,包括当前位置,不包括指定字符并进入插入模式 也可配合数字进行操作 复制粘贴: 复制:y 粘贴:p 剪切:d 配合可视模式,选中要复制的内容后使用y复制,p粘贴 配合文本对象使用,例如tiw复制一个单词,yy复制一行 寄存器的使用: vim里操作的是寄存器而不是系统的剪切板 默认使用了d删除或者y复制的内容都放到了“无名寄存器” 小技巧:使用x删除字符放到无名寄存器中,然后用p粘贴,可以替换两个字符的位置 vim不使用单一剪切板进行剪贴,复制与粘贴,而是使用多组寄存器{ 通过"{register}"前缀可以指定寄存器,即"+寄存器名称+操作,不指定默认使用无名寄存器,其中" + 寄存器名称 为引用某寄存器 使用" 寄存器名称 + 操作 可以完成将某寄存器的内容进行复制的操作,例如"bp 可以使用 reg + 寄存器名称 来查询寄存器中存有哪些内容 除了有名的寄存器‘a-z’,vim还有一些其他常见寄存器{ 复制专用寄存器 "0 ,使用y复制文本同时会被拷贝到寄存器0 系统剪贴板 "+ ,可以在复制前加上"+ 复制到系统剪贴板 其他一切寄存器比如 "%当前文件名,".上次插入的文本 } } 宏: 宏可以看成是一系列命令和集合 我们可以用宏“录制”一系列操作,然后“回放” 宏可以非常发便地把一系列命令用在多行文本上 使用:{ q 键开始“录制”,同时q 键结束“录制” 保存的命令依旧放到了寄存器里面 可以使用q{register}选择要保存的寄存器,把录制的命令放进里面,qa:使用寄存器a 使用@{register}回放寄存器中保存的一系列命令 例如:qa + 一系列操作,将一系列操作保存在a中 可视化全选,前面的< ** > 之类的不用管,在后面用normal + 空格 + @a,在所有行回放a中保存的操作 } 搜索: / 前向搜索 ? 反向搜索 n 跳转到上一个匹配 N 跳转到下一个匹配 * 当前单词的前向匹配 # 当前单词的后向匹配 替换: substitute 命令准许我们查找并替换文本,并且支持正则式 举例:{ :[range]s[ubstitute]/{pattern}/{string}/[flags] range 表示范围,比如 10,20 表示10-20行,%表示全部 s 表示替换 pattern 表示要替换的模式,string 表示替换后的文本 flags 的几个常用标志 g 表示全局范围内执行 c 表示确认,可以确认或拒绝修改 n 报告匹配到的次数而不替换,可以用来查询匹配次数 举例: :% s/temp/temp1/g 将全局的temo替换为temp1 :% s/\<temp\>/temp1/g 将完整的单词temp替换,而不替换某些单词中的temp(正则) } gg 移动到文档开头 G 移动到文档结尾 H 快速移动到文档的开头 M 快速移动到文档的中间 L 快速移动到文档的结尾 ctrl + u 向上翻页 ctrl + f 向下翻页 zz 把光标所在行放在屏幕的中间 zt 把光标所在行放在屏幕的顶部 zb 把光标所在行放在屏幕的底部 ctrl + o (字母o)快速返回 m 标记,例如 mx ,之后可以用 `x 来跳转到标记位置 gi 快速跳转到最后一次编辑的位置并插入(但是我这里用nvim并没有成功并报了一个错误,没有找到程序啥啥的= =) w/W 移动到下一个单词开头 e/E 移动到下一个单词结尾 b/B 移动到上一个单词开头 (小写的字母的单词表示以非空白字符分割的单词,大写字母表示以空白字符分割的单词) 行间搜索: 使用f可以移动到字符上,t移动小下一个字符{ 用法: f + 要搜索的字符 t 的用法与f的用法相同,但是跳转到要搜索的字符的前一个字符处 F 搜索前面的字符,用法与f,t相同 T 搜索前面的字符,跳转到前一个字符的后一个字符处 有多个相同的字符时,可以使用';'跳转到下一个正在搜索的字符,','跳转到上一个正在搜索的字符 } :w 保存 :q 退出 :wq 保存并退出
-
插入模式(可以用a,i,o,A,I,O进入,可以用esc从插入模式退回到普通模式)
i,a,o进入编辑模式 i在当前光标所在字符的前面插入 a在当前光标所在字符的后面插入 o在当前光标所在行的下一行插入(新建一行插入) I,A,O进入编辑模式 I在当前光标所在行的最前面插入 A在当前光标所在行的尾部插入 O在当前光标所在行的上一行插入(新建一行插入) ctrl + h 删除上一个字符 ctrl + w 删除上一个单词 ctrl + u 删除当前行(第一次按下时光标移动到当前行起始位置,第二次按下时,光标到达上一行的末尾处,即彻底删除一行) esc退出插入{ 替代方案: ctrl + c (可能中断某些插件) ctrl + [
}
-
cmd命令模式
-
可视化模式(v)
v进入选择模式 V选择行并进入选择模式 ctrl + v 进入方块选择,即可以多行,多列,不一定非要是一整行
-
vim多文件操作:
buffer 缓冲区: :e + 文件名 打开一个文件,e表示当前路径 :ls 列举缓冲区 :b n 跳转到第n个缓冲区 :bpre 跳转到上一个 :bnext 跳转到下一个 :bfirst 跳转到第一个 :blast 跳转到最后一个 :b + buffer_name(buffer的名字)可以用table补全跳转 windows 窗口: 可以在不同的窗口打开不同的buffer,编辑相同的buffer会使其余的窗口显示的内容同步变化 ctrl + win + s 或 :vs 竖分屏 ctrl + win + v 或 :sp 横分屏 ctrl + win + w 在窗口间循环切换 ctrl + win + h 切换到左边的窗口 ctrl + win + j 切换到下边的窗口 ctrl + win + k 切换到上边的窗口 ctrl + win + l 切换到右边的窗口 ctrl + win + '=' 使所有的窗口等宽等高 ctrl + win + '_' 最大化活动窗口的高度 ctrl + win + '|' 最大化活动窗口的宽度 tab(标签页)将窗口分组: :tabnew 新建一个标签页,可以在新建时打开另一个文件 :tabe[dit] {filename} 在新标签页中打开{filename} ctrl + win + T 把当前窗口移动到一个新的标签页 :tabc[lose] 关闭当前标签页及其中的所有窗口 :tabo[nly] 只保留活动标签页,关闭所有其他标签页 :tabn[ext] {N} 或 {N}gt 切换到编号为N的标签页 :tabn[ext] 或 gt 切换到下一个标签页 :tabn[revious] 或 gT 切换到上一个标签页 vim 的 text object(文本对象) [number]<command>[text object] number 表示操作次数 command 表示命令(例如,d,c,y等)text objext 表示文本对象(例如,单词w,句子s,段落p) 成对字符间的操作: vi + 符号 ,选中成对特定符号间的内容 ci + 符号 ,删除成对的特定符号间的内容并进入插入模式