Vim 键位整理
如果你是初学者,我是不建议你直接看这一章节的,因为实在太多了,你会乱的。但是如果你已经用了很久 Vim,偶尔想看看以前没记牢的或者想看看哪些不知道的键位,一点一点翻以前的课程又会很浪费时间,所以我放出了这个章节,将所有的键位整理起来,以便查阅。
整理进度跟本书更新进度齐平。
<space>空格键<cr>回车<c-f>表示<ctrl>和f的组合键
写入、保存、退出
:q[uit] " 退出:q! " 强制退出:w[rite] " 保存:w! " 强制保存,能不能保存成功取决于用户对文件的权限:w ! sudo tee % " 如果没有权限保存,试试这个命令ZZ " 两个大写的 Z,没有修改直接退出,有修改保存后退出:w newfilename " 另存为新文件:1, 10 w newfilename " 将 1 到 10 行的内容另存为新文件:1, 10 w >> filename " 将 1 到 10 行的内容另存为新文件:r filename " 将目标文件的内容追加到当前光标下一行:3 r filename " 将目标文件的内容追加到第 3 行一下:! ls " 暂时离开 Vim 查看当前目录的文件,回车后返回 Vim
光标移动
h " 方向键 ←j " 方向键 ↓k " 方向键 ↑l " 方向键 →0 " 移动到行首$ " 移动到行尾的回车符g_ " 移动到行尾最后一个非空字符gg " 移动到第一行G " 移动到最后一行"w " 移动到下一个单词开头e " 移动到单词的结尾b " 移动到单词的开头" 不常用nh " 向左移动 n 格,n 为数字nl " 向右移动 n 格nj " 向下移动 n 行nk " 向上移动 n 行n<space> " 向右移动 n 格,同 nlH " 移动到当前屏幕第一行的第一个字符M " 移动到当前屏幕中间行的第一个字符L " 移动到当前屏幕最后一行的第一个字符+ " 移动到非空白字符的下一行- " 移动到非空白字符的上一行:n<cr> " 跳转到第 n 行
翻页
<c-f> " 向下移动一页<c-d> " 向下移动半页<c-b> " 向上移动一页<c-u> " 向上移动半页
查找与替换
/word " 从光标位置向下搜索 word 单词?word " 从光标位置向上搜索 word 单词n " 英文字母 n,根据 / 或 ? 搜索的方向定位到下一个匹配目标N " 与 n 相反,定位匹配目标:n1,n2s/word1/word2/g " n1, n2 表示数字,替换 n1 行到 n2 行的单词:1,$s/word1/word2/g " 全文替换,也可以写成 :%s/word1/word2/g:1,$s/word1/word2/gc " 全文替换,并出现确认提示
复制、粘贴、删除
x " 向后删除一个字符nx " 向后删除 n 个字符X " 向前删除一个字符nX " 向前删除 n 个字符dd " 删除当前行ndd " 向下删除 n 行d1G / dgg " 删除第一行到当前行的数据dG " 删除当前行到最后一行的数据d$ " 删除当前字符到行尾D " 删除当前字符到行尾d0 " 从行首删除到当前字符yy " 复制当前行Y " 复制当前行nyy " 从当前行开始复制 n 行y1G / ygg " 从第一行复制到当前行yG " 从当前行复制到最后一行y0 " 从行首复制到当前字符y$ " 从当前字符复制到行尾p, P " 黏贴,p 黏贴到光标下一行,P 黏贴到光标上一行yyp " 复制并粘贴ddp " 删除并粘贴,相当于下移当前行"+y " 复制本文到系统剪切板"+p " 粘贴系统剪切板到 Vim(不会影响文本格式)
插入
i " 在光标前进入 insert 模式I " 在当前行左边第一个非空字符前进入 insert 模式,类似其他编辑器的 <c-a> 快捷键a " 在光标后进入 insert 模式A " 在当前行右边第一个非空字符前进入 insert 模式,类似其他编辑器的 <c-e> 快捷键o " 在光标的下一行插入O " 在光标的上一行插入s " 删除当前字符,并进入 insert 模式S " 删除当前行,并进入插入模式vc " 删除当前字符,并进入 insert 模式cc " 删除当前行,并进入插入模式c0 " 删除光标位置到行首,并进入 insert 模式cg_ " 删除光标位置到行尾最后一个非空字符,并进入 insert 模式ce " 删除光标位置到单词末尾,并进入 insert 模式cw " 删除光标位置到单词末尾,并进入 insert 模式ciw " 删除当前单词,并进入 insert 模式cip " 删除整个段落,并进入 insert 模式ci( " 删除当前括号内的内容,并进入 insert 模式 适用于 ([{<'` 等所有成对的标签
撤销重做
u " 撤销<c-r> " 重做. " 重复完成操作
替换
r " 替换单个字符,自动返回 normal 模式R " 连续替换多个字符,手动 <esc> 返回 normal 模式
大小写
~ " 当前字符大小写反转g~~ " 正行字符大小写反转vu " 当前字符小写vU " 当前字符大写vU " 当前字符大写viwu " 当前字符小写viwU " 当前字符大写ggguG " 文本所有字符小写gggUG " 文本所有字符大写:%s/\<./\u&/g " 将所有单词首字母大写(需要使用 :nohls 去掉高亮):%s/\<./\l&/g " 将所有单词首字母小写:%s/.*/\u& " 将每行第一个字母大写:%s/.*/\l& " 将每行第一个字母小写
多窗口操作
:sp filename " 上下分割窗口:vs[p] filename " 左右分割窗口<c-w>h[j[k[l]]] " 根据方向键移动光标到该方向的窗口上<c-w>[N]> " N 位数字,可选,增加当前窗口 N 列宽"<c-w>[N]< " N 位数字,可选,减少当前窗口 N 列宽"<c-w>[N]+ " N 位数字,可选,增加当前窗口 N 行高"<c-w>[N]- " N 位数字,可选,减少当前窗口 N 行高"<c-w>= " 将所有窗口设置等宽高<c-w>[N]n " N 位数字,可选,打开一个新窗口 N 行高,默认为整个窗口的一半"<c-w>[N]s " N 位数字,可选,将当前窗口垂直分割为上下两个窗口展示"" 新窗口可以为 N 行高,默认为整个窗口的一半"" 类似于 :sp current_file"<c-w>[N]v " N 位数字,可选,将当前窗口水平分割为左右两个窗口展示"" 新窗口可以为 N 列宽,默认为整个窗口的一半"" 类似于 :vs current_file"<c-w>o " 关闭除当前窗口外的所有窗口<c-w>r " 顺时针转动窗口<c-w>R " 逆时针转动窗口<c-w>x " 对调左右或上下两个对应的窗口<c-w>q " 退出窗口:q " 退出窗口
多文件编辑
vim file1 file2 " 同时打开两个文件:files " 查看现在编辑的文件列表,%a 代表正在操作哪个文件1 %a "file1" line 12 "file2" line 0:n " 跳到下一个文件,这里的 n 就是字母:N " 跳到上一个文件
2018-04-17 发布