vim命令
目录与终端操作
| 按键 | 说明 |
|---|---|
| :E | 当前窗口打开目录 |
| :Sex | 垂直窗口打开目录 |
| :Vex | 水平窗口打开目录 |
| 回车或鼠标 | 打开文件夹或文件 |
:edit 路径 | 打开其他文件夹 |
| s | 排序 |
| R | 重命名 |
| D | 删除 |
| I | 隐藏上面说明横幅 |
| i | 文件排列方式 |
let g:netrw_browse_split = n | 1 用水平拆分窗口打开文件 2 用垂直拆分窗口打开文件 3 用新建标签页打开文件4 用前一个窗口打开文件 |
:term/:terminal | 水平打开终端 |
:vertical :term | 垂直打开终端 |
系统提供教程:终端命令 vimtutor
提高效率:
vim +n filename 打开文件跳转的指定行数
vim +/xx filename 打开文件,跳转到含有内容的行
浏览
| 功能 | 按键 |
|---|---|
| 下个词头 | w |
| 上个词头 | b |
| 下个词尾 | e |
| 上个词尾 | ge |
| 下个字串 | W |
| 上一页 | ctrl + b |
| 下一页 | ctrl + f |
| 行首 | 0 |
| 行尾 | $ |
| 行首非空 | ^ |
| 行尾非空 | g_ |
| 文档首 | [[ |
| 文档尾 | ]] |
| 置顶 | zt |
| 居中 | zz |
| 置底 | zb |
| 之前位置 | `` |
| 前往定义 | gd |
注释
多行注释
ctrl + v 进入 visual block 模式,选中多行注释行
I 大写进入行首编辑模式,输入 // 或 #,之后按两次 ESC 完成,多行注释清除
ctrl + v 进入 visual black 模式,选中多行的 // 或 #,按 d 清除即可
编辑
I 句首插入
A 句尾插入
cw 删除到下个单词前并插入
J 下一行并入本行
:saveas 另存为
:bn, :bp 打开上个文件或下个文件
gU, gu 变大写或变小写
提高效率
:set ai 开启自动对齐(缩进)
r 替换指定位置的字符,不会进入插入模式
R 替换模式
s 删除当前字符后插入,也很常用
:e 刷新文件
gg=G 代码全部对齐
搜索选中
按下 v 之后,可以任意移动光标来使光标经过的区域的文本处于可视化选中状态。
按下 y,把选中的内容复制到VIM内部的默认寄存器 " 中。
按下 / 或 ?,进入搜索状态。
按下Ctrl-R,然后按下 ",把寄存器 " 中的内容粘贴到搜索栏中。(Ctrl-R?)
最后,按下“回车”,执行搜索。
删除
x 或 dl 删除当前字符
X 或 dh 删除前一字符
d]] 删除至文档末尾
dw 删除到下一个单词开头
de 删除到本单词末尾
dE 删除到本单词末尾包括标点在内
db 删除到前一个单词
dB 删除到前一个单词包括标点在内
J 删除本行的回车符(CR),并和下一行合并
dt" 删除所有内容直到 "
拷贝粘贴
yw 拷贝一个单词
yy 拷贝一行
nyy 拷贝n行
"+y 复制 1 行到操作系统的粘贴板
"+nyy 复制 n 行到操作系统的粘贴板
yG 拷贝到文章末尾
y1G 拷贝到文章开头
"xnyy 拷贝n行给变量x(任意字母),非常喜欢的功能,输出函数可以拷贝成p,这样不会不用当前复制了一段别的东西,还有回去复制输出了
:reg 拷贝给哪个变量不记得了就可以用查看信息的命令
C-r 0 编辑时粘贴
vmap <C-x> :!pbcopy<CR> 快捷键复制
vmap <C-c> :w !pbcopy<CR><CR> 快捷键粘贴
vmap "+y :w !pbcopy<CR><CR> Mac 配置与 Linux 一样复制
nmap "+p :r !pbpaste<CR><CR> Mac 配置与 Linux 一样粘贴
拷贝选择的多行
v 进入 visual mode 移动光标就是选中文本了。V 则是以行为单位
y 拷贝 d 删除
:s/old/new/g 轻松替换一行里面的全部 old <—> new,如果只替换行内的第一个,去掉最后的 /g,都是通用的正则了
如果要替换指定范围内的行数,前面简单的加上就可以了
:80,84s/create/delete/g 其中 . 表示当前行,# 表示最后一行
全部替换的话,可以使用
:%s/old/new/g
书签,标签,标记
浏览代码时需要马克一下的时候:
mX : X为任意字母
:marks 查看当前设置的所有标签
'X 跳到书签
'' 返回到跳转前的位置
delmarks a 删除标签a
delmarks! 删除所有标签,不包括[A-Z]和[0-9]标签
代码移动
A(a, b, c...) m B 移动单行或多行到某一行
:set sw ? 查看代码一次移动的个数
:set sw=2 设定2位
:le | :ce | :ri 定位左中右
运行 shell 命令(终端)
:! [command] 会跳回 shell 执行,完成按任意键返回
多文档编辑
之前觉得 vi 的多文档编辑用着很不方便,现在接触了几个,用过了 MiniBufExplorer,发现看着不是很舒服。还是使用ls比较好看一些。
:ls 展示全部的打开文档
:xn 切换到向下的第x个文档
n ctrl+6 : 切换到第n个buffer
ctrl+6 或 :e# 回到前一个编辑文件
标签页
一个标签页相当于一个 vim,一个 vim 可以有多个分屏
:tabs 查看所有打开的tab
:tabe[dit] 在新标签页里编辑文件,替换 :tabnew [filename]
:tabc[lose] 关闭当前标签页
:tabo[nly] 关闭所有除了当前标签页以外的所有标签页
:tabm[ove] N 把标签页移到序号为N位置
:tabp[revious] 转到上一个标签页,替用 :tabN[ext]
:tabn[ext] 转到下一个标签页
:tabr[ewind] 转到第一个标签页,替用 :tabfir[st]
:tabl[ast] 转到最后一个标签页
gt 常规模式切换下一个tab,前面加上数字则是切换到第几个,比如 2gt 是切换到第二个,不是切换两次
gT 常规模式切换上一个tab
:tabdo 为每个标签页执行命令
:tabf[ind] 寻找 ‘path’ 里的文件,在新标签页里编辑之
分屏
在shell里打开几个文件并且分屏:
vim -On file1 file2 ...
vim -on file1 file2 ...
大O表示垂直分割(vertical),小o表示水平分割(默认horizontal)
在vim里打开一个分屏:
创建空白分屏:
:new
打开任意文件:
<C + w>s 上下分屏
<C + w>v 左右分屏
:vsp(:vsplit) filename 水平分屏
:sp(split) filename 垂直分屏
打开当前文件:
ctrl+w 和 s(split)
ctrl+w 和 v(vsplit)
:[n] split(vsplit) [++opt] [+cmd] [file] n 为显示行数,opt 选项信息,cmd 预处理命令,file 文件
:sview filename 只读方式打开
:sfind [++opt] [+cmd] [file] 与 split 一致,若无文件,则不打开,split 会新建文件
关闭分屏:
:only 或者 ctrl+w o 取消其它分屏,只保留当前分屏
ctrl+w c(close) 关闭当前分屏
ctrl+w q(quit) 只剩最后一个分屏以后推出
:qa 关闭所有分屏
移动光标,也就是切换分屏;也可以移动分屏,比如将左分屏移动到右边。
ctrl+w w 各种切换,只有两个分屏的时候还是比较方便的
ctrl+w h(H) 左
ctrl+w j(J) 下
ctrl+w k(K) 上
ctrl+w l(L) 右
分屏互换
ctrl + w + r 向下(无下则向右)方交换窗口,而Ctrl + w + R则和它方向相反
ctrl + w + x 交换同列或同行的窗口的位置
ctrl + w + K 移动当前窗口至屏幕顶端,并占用全部宽度
ctrl + w + J 移动窗口至屏幕底端,并占用全部宽度
ctrl + w + H 移动窗口至屏幕左端,并占用全部高度
ctrl + w + L 移动窗口至屏幕右端,并占用全部高度
最后就是改变分屏尺寸的操作了。
ctrl+w < 左
ctrl+w > 右
ctrl+w + 上
ctrl+w - 下
ctrl+w = 恢复均等
diff
vimdiff a b shell 命令,打开 vim 比较两个文件异同
vim -d a b 同上,简写
:diffsp(split) xxx 与 xxx 文件对比异同,垂直
:vert diffsp(split) xxx 与 xxx 文件比较异同,水平
:diffoff 关闭对比效果
宏
qx 启动宏录制,录制到 x 寄存器
q 结束宏录制
@x 运行宏
@@ 运行最近运行的宏
其他
:n1,n2 co n3: 将n1行到n2行之间的内容拷贝到第n3行下
:n1,n2 m n3: 将n1行到n2行之间的内容移至到第n3行下
:n1,n2 d: 将 n1行到n2行之间的内容删除
:n1,n2 w!command: 将文件中n1行至n2行的内容作为command的输入并执行
, 若不指定n1,n2,则表示将整个文件内容作为command的输入
问题
:set fileformats=unix,dos 处理 ^M,分屏再次打开
^M 问题
若你的vim版本大于7.1,并想用dos显示和保存,如下语句:
:e ++ff=dos
若你的vim版本小于等于7.1,又想把文章按照dos格式显示和保存,如下语句:
:set ff=dos
:%s/\r+$//e
若你的vim版本小于等于7.1,又想把文章按照unix格式显示和保存,如下语句:
:set ff=unix
:%s/\r+$//e
按键映射
主要有map,noremap,unmap,mapclear四个 命令,并且有四个前缀i,c,n,v修饰
nore 表示非递归,见下面的介绍
n 表示在普通模式下生效
v 表示在可视模式下生效
i 表示在插入模式下生效
c 表示在命令行模式下生效
map 表示递归的映射
unmap 表示删除某个映射
mapclear 表示清除映射
Vim命令使用全攻略
6335

被折叠的 条评论
为什么被折叠?



