用意: 网络上常见的vim教程都是针对文本编辑器本身的功能来展开的, 我希望单纯从高效编辑源代码方面写些自己的总结. 前提是懂一些基本的命令, 参考文献1是个不错的入门教材.
总结主要分为模版生成, 快速定位, 插入删除以及Gist在线代码库四个部分.
一. 模版生成
1.1
模版库: 以C++最常用的模版为例, 末班放在~/templates/template.cpp
#include<iostream>
using namespace std;
int main() {
return 0;
}
1.2
命令: cp ~/templates/template.cpp *.cpp; vim *.cpp来开始编辑文件
1.3
alias: 在linux下也可以在~/.bashrc文件下加入alias ct='cp
~/templates/template.cpp'; 然后使用ct *template.cpp来编辑.
二. 快速定位
做一个双手会跳舞的程序员, 在程序中四处快速地穿梭.
2.1 显示坐标系: 显示行标
笛卡尔最大的贡献就是建立了坐标系, 从而统一了古典数学中的几何和代数. 通过显示行号和列号来构建穿梭的
坐标系. 在normal mode下使用set number来显示行标, 当然也可以讲set number加入~/.vimrc文件中. 如下所示
1 #include <iostream>
2 using namespace std;
3 和谐社会
4 double main1()2 {
5 return 0~
6 }
命令: 如果想编辑第n行, 输入ngg或者nG即可. 例如输入3gg或者3G就可以了. 定位了行数以后如果想在这一行进行编辑怎么做呢?
2.2 在行内穿梭: 行内定位
2.2.1 精准定位 [修改上面的代码]
在第三行加注释: 0 + i + "//", 后面有代码块注释的方法. 0表示回到行的第一个字符, 不包括smartindent
修改main的返回类型: ^ + cw + i + "int"; ^表示回到本行的第一个非空白字符, cw表示from the cursor to the word. 删除从光标到单词结尾. 当然长按x也可以.
将"~"改为";": $ + x + ";"即可删除. $表示每行的最后一个非空字符
在return 0后面增加注释: g_ + i + "//"即可 g_表示每行的最后一个字符
修改main1为main: 可以使用/1或者4gg+f)或者使用4gg+w+e的组合键. w表示下一个单词, e表示单词结尾.
修改()2为(): 可以使用/2或者4gg+f2或者使用4gg+w+E的组合键. 小写字母w和e仅包括字母和_下划线. 大写W和E包含所有可打印的ASCII码.
注:
0, ^, g_, $ 分别表示行开始, 行非空开始, 行非空结尾, 行结尾. 见下图
跳跃main{}语句: 4gg+$+%即可. 利用%的括号匹配
2.2.2 其它定位
如果从尾部开始找的话就只能使用F和T来找了. 如果出现特别长的句子, 例如SQL语句时, 使用/ ? F/T/f/t这些搜索语句比较靠谱. 当然使用Nhjkl也可以
三. 插入删除
3.1 删除某个变量名 cw和Nx
3.2 初始化数组
a = {1,1,1,1,1,,.....1}; 使用"."来做, 先插入1, 再按"99."即可
3.3 插入cout调试语句, 使用o或者O在光标所在行的前面或者后面插入语句.
3.4 撤销和恢复最喜欢了. u(undo)和crtl-r(redo)可以完成任务.
3.5 保存文本: 使用wq保存, q!不保存强制退出, 使用e *.file打开文本, 使用saveas另存为; 使用bn和bp打开最近打开的文本.n表示buffer中的next文件, p表示buffer中的previous文件.
3.6 集体注释整个main函数: crtl-v进入试图模式, 使用4gg+crtl-d或者3j或者$+%选择行], 然后使用I// + [ESQ]即可.
3.7 删除main函数或者函数body中所有的参数列表: 以删除mainbody为例, 5gg+vi}即可. 可以使用[d | y | v] [i | a]来进行复杂操作.
3.8
神奇自动补全: crtl-p
3.9 多窗口复制粘贴 sp *.cpp加上crtl-w + 向上/向下箭头 来回复制粘贴.
3.10 复制函数名, 例如main; 直接使用光标在m前提下yfn即可.
注: 使用help 和help usr_01.txt寻找更多功能.
四. Gist在线代码库
随时随地调出上传自己的代码库出来, 利用gist吧.
首先使用vundle安装插件
Bundle 'mattn/webapi-vim'
Bundle 'mattn/gist-vim'有用的命令
发送public gist ~ Gist -P
获得某个gist ~ Gist 7577124
获得个人的gist列表 ~ Gist -l
获得个人的start list ~ Gist -ls
获得所有人的gist列表 ~ Gist -la
获得某个用户的gist列表 ~ Gist -l "xiaoqiangkx"
参考: https://github.com/mattn/gist-vim
五. 其它
运行外部命令 !g++ test.cpp; ./a.out 神器啊, 不用wq又vim了.
vimrc配置
4.1 显示行数 set number
4.2 设置space set tabstop=4
4.3 设置智能空格 set smartindent
参考资料
[1] learning vim progressively http://yannesposito.com/Scratch/en/blog/Learn-Vim-Progressively/
[2] vim-gist插件 https://github.com/mattn/gist-vim