@(linux 编程)[vim, 技能, VIM, 开发技能, 工具使用]
使用vim 大概有2年,但是感觉一直停留在刚入门。这几天幡然醒悟自己的开发环境和开发技能如此落后,可恨的是还停滞不前许久,因此决定发愤图强,改变他。
--- lcd
vim 神之编辑器 哈哈哈
本文记录, vim 入门后使用进阶
说明 :
命令格式
xxx
表示在Nornal 模式下键盘直接输入
命令格式: xxx
表示在命令行模式下输入
命令格式C_x
表示键盘 ctrl + x
日常操作
个人感觉满足90%的需求
Nornal 模式 下光标快速移动
操作 | 效果 |
---|---|
0 | 到行首 |
^ | 到本行第一个非空位置 |
$ | 到行尾 |
g_ | 到本行最后一个非空位置 |
* | 当前单词下一个位置 (n向下继续查找) |
# | 当前单词上一个位置 (N向上继续查找) |
% | 移动到当前括号匹配的位置 |
:/xxx | 向下查找xxx 词(?向上查找) |
NG | 到第N行 |
gg | 到第一行 |
G | 到最后一个行 |
' ’ (两个单引号) | 上一个位置 |
w | 按单词跳动 , W (按blank划分跳动) |
e | 单词尾 , E (按blank划分跳动) |
fx | 到当前行下一个为x的字符 |
tx | 到当前行 x 前的一个字符 |
进入Insert 模式 快速开始输入
操作 | 效果 |
---|---|
i | 在光标前面插入 |
I | 行首非空字符前插入 |
a | 在光标后面插入 |
A | 行末非空字符后插入 |
o | 在下一行首插入 |
O | 在上一行首插入 |
cw | 删除当前单词,进入插入模式 |
拷贝黏贴那几个命令
操作 | 效果 |
---|---|
p | 黏贴 |
yy | 复制当前行 |
yw | 复制光标到单词结束 |
y^ | 复制光标到最前一个非空字符 |
y$ | 复制光标到最后一个非空字符 |
2yy | 复制当前行开始的2行 |
2y | 复制当前行和后续2行 |
其他组合操作类似
操作撤销和恢复
- u 撤销操作
- C_r 恢复操作
文件打开保存退出切换
操作 | 效果 |
---|---|
: e xx | 打开文件 |
: saveas xx | 另存为 |
: E | 查看目录 |
: ls | 查看缓冲区,打开的文件 |
: buffer x | : ls 后可以直接打开对应的文件 编号x |
: bn/ : bp | vim xx xx 多个文件的时候,切换 |
操作的快速重复
- 快速重复操作 : 小数点
.
- N[cmd] : 执行 cmd N 次(p, dd, x..)
区域选择
选择指定符号 (", ', ), }, ]) 区域内的内容
举个例子 : [ a + cda [daff ] ], 当前光标在 [daff] 范围
操作 | 选中 |
---|---|
v i ] | [ a + cda [daff ] ] |
v a ] | [ a + cda [daff ] ] (包括符号) |
v 2i ] | [ a + cda [daff] ] |
v 2a ] | [ a + cda [daff ]] |
** 数字 表示向外第几层,默认1,当前层**
块操作
C_v 进入块操作-- 局部。
- 整块注释
void fun(void)
{
printf("fun %s", __FUN__);
}
//void fun(void)
//{
//printf("fun %s", __FUN__);
//}
光标定位void 位前,按 C_v, 然后光标向下拖动(hjkl..),选择注释范围,大写I进入插入模式,输入//,
ESC退出,所有行都会被注释。
- 整块缩进
同上,选中块列首, C_> 或者 C_< 进行缩进(选中后输入数字可以设定缩进个数)
V/v 块操作— 整行选择
键盘v, 选中操作的块区域。-
=
: 代码自动缩进(多层次) - J : 选中区域连接为一行
-
宏录制
st=>start: qa : q开始记录,a是保存的寄存器
end=>end: end
op=>operation: 一系列操作, 诸如yy,ddd
opq=>operation: q : 停止记录
opu=>operation: @a : 调用录制的宏
opu2=>operation: @@ 调用最近录制的宏
opu3=>operation: 3@a 执行a中保存的宏3次
st->op->opq->opu->opu2->opu3->end
分屏操作
- 终端打开命令
$vim -On file file2 #大写O垂直分屏打开文件
$vim -on file file2 #小写水平打开
# n 表示分屏数,直接n等于文件个数, 如果n小于文件,按顺序打开前面的n个,如果大于,打开空编辑页面
分屏快捷操作
C_w + hjkl 或者方向键移动光标
C_w + HJKL 移动分屏 (太多分频使用容易混乱)
C_w + c 关闭当前分屏
C_w + q 关闭当前分屏,如果最后一个,退出vim编辑器命令行分屏设置 :
:split / :vsplit
+ 文件打开分屏后,可以设置同步滚动 :
:set scb
关闭同步滚动 :
:set noscb
标签定位
打标签
光标移动到需要标记的位置, 键盘mx
(x 代表 26 个字母,指代存储位置)*跳到标签位置
键盘 ````x ```
(`是tab上的那个点)*
:marks 得知目前所有标签的列表。标签作用域
小写字母,作用当前文档
大写字母,作用编辑的各个文档之间 (同一个buffer)
数字,可作用前面十次编辑的文档之间。
数字的用法比较特殊,'0 是回到前一次编辑文档中离开前的最后位置,'1 则是回到前第二次编辑文档最后离开的位置,依此类推。该功能是vim自动标记,請 :h viminfo-file-marks。viminfo 關掉,就沒這個功能了! 所谓前次指的是前次启动的 vim。
没插件也能IDE ? --- 可以可以
分屏浏览目录打开
操作 | 效果 |
---|---|
:He | 在下面分屏打开目录 (:He!在上面)) |
:Ve | 在左边分屏打开目录 (:Ve!在右边) |
Tab 分页浏览目录打开
操作 | 效果 |
---|---|
:Te | 在新页打开目录 |
:tabs | 查看打开的情况 |
gt | 跳到下一页 (T上一页) |
x gt | 直接跳到指定页 i |
:tabclose i | 关闭i 页,没指定关闭当前 |
:bufdo tab split | 把buffer中的文件全部转为tab |
vim启动直接以页的形式打开文件
vim -p xx.c aa.c
保存打开几个tab 或者设置各种参数的会话
操作 | 效果 |
---|---|
: mksession path_name.vim | 保存当前建立的会话窗口 |
vim -S path_name.vim | 打开保存的会话 |
: qa / : wqa | 退出当前会 |
关键字补全快捷键
以下,在Insert 模式进行操作
单词补全
输入单词一部分后,C_n, 自动补全一个。如果这个补全对象不对,C_p
,回退补全,方向键选择实际需要的选项。
其他补全
C_X
的前提下, 如下快捷键对应功能 :
输入 | 功能 |
---|---|
C_D | 宏定义补全 |
C_L | 行补全 |
C_F | 文件名补全(补全目录下文件的名称) |
C_I | 关键字补全 |
C_V | 表达式补全 |
C_] | Tag 补全 |
quickfix 功能
编译出错调试
当前目录下包含makefile , 在vim 命令中执行:make
,如果编译出现错误,执行结束后回车,在命令行中执行: cw
打开窗口查看信息。: cl
可以直接列出所有错误信息; : cp
跳到上一个错误, : cn
跳到下一个错误。
信息查找
在vim 下查找 XXX 宏在哪里出现,命令行下输入 :
: grep -r --include="*.[ch]" XXX ./
命令递归查找当前目录下的 *.c 和 *.h 文件中包含XXX宏。查找后,通过命令 :cw
查看。
快速打开光标所指文件
- Normal 模式下, 键盘
gf
- 退回, C_o
- 打开文件存在buffer中,参看buffer使用。
其他加速操作
操作 | 效果 |
---|---|
dtx | 删除内容直到遇到x |
ga | 查看光标处的ASSII码 |
g8 | 查看光标处的UTF-8码 |
guu(Vu) | 当前行全部变为小写 |
gUU(VU) | 当前行全部变为大写 |
:r ![cmd] | 执行shell 命令并把结果黏贴到文本 |
- 写一段python代码,选中后,执行 : !python,结果黏贴在文本,替换了源代码
参考
酷壳--简明 Vim 练级攻略
无插件Vim编程技巧
大家来学vim