之前在vim上尝试在过插件,一句话,很麻烦,很多问题,如果怕麻烦或者没有太多空闲时间,建议不要用,太浪费时间了.
如果你经常写c/c++ 代码的话会经常有一些固定的模板要多次写如,比如模板类,要写好多的template <class T>,如果你用Sublime写的话可能会快些,他会把之前写过的字符串进行动态匹配,但是对于VIM就不行.当然你可以ctrl+n或者ctrl +p来匹配之前写过的,但是如果要匹配多行的信息可能你就不知道怎么办了(不嫌麻烦可以多次yy),所以我今天介绍我一天的成果,不用下载下件,不用你会vimsrcipt,可以轻松想在sublime中一样编写方便快捷.sublime可以自定义快捷键生成模板
先介绍功能:(注意:这些自定义命令在编辑是输入即插入模式输入的,并且输入的要快,快,快,说三遍了啊)
1.括号的自动匹配生成(vim只能写一个,而sublime可以在写了左括号后自动匹配右括号)
自动匹配并且光标在括号中间(此处可以匹配小,中,大三种括号)
2.生成/**/
3.输入#def 生成#define
4.输入#in 生成#include<>光标在括号之间
5.输入np 生成using namespace std;
6.输入nf生成头文件定义模板
#ifndef xxxx
#define xxxx
//代码段
#endif
7.按ctrl+A 全选,ctrl+c复制,ctrl+v粘贴,这里不建议用后两个,建议用y和p
8.输入class生成 输入st和空格生成 输入tp和空格生成
class ClassName{ struct | { template <class T>
};//默认选中类名方便更改 };//光标默认在红色竖线处
9.输入if ,ife,while,do,switch,try,mian都会生成对应模板
10.输入fn 和空格会生成函数声明信息注解方便作者书写
11.ctrl + R会编译运行c,c++,java,python文件
代码教程:
在vim的匹配中除了插件外,一般有ctrl+p,ctrl+n 或者字典匹配ctrl+x ctrl+k等,这里可以自行百度
http://haoxiang.org/2011/09/vim-modes-and-mappin/,这个比较详细
在vim中也可以写vimsrcipt脚本,这里我介绍一下map命令,网上的解释很多,我就不赘述了.我就简单解释一下代码中的语法.
map a b 意思是在命令模式下按a的效果与b的效果相同
举个栗子:map a :!ls 按a就会显示当前目录下的文件列表
inoremap 是插入模式在非递归map,就是在插入模式下可以讲文本当命令用
举个栗子:inoremap a hello 意思是在输入时输入a就会被替换为hello,
inoremap a <ESC>:ls 按a就会显示当前目录下的文件列表
看到这你应该就明白其实就是给命令在不同模式下起个名字
代码:你可以将下列代码复制到当前用户下的 .vimrc文件中,也可以直接写在/etc/vim/vimrc文件中
"user design start
inoremap ( ()<ESC>i
inoremap [ []<ESC>i
inoremap { {}<ESC>i
inoremap<> <><ESC>i
inoremap /* /**/<ESC>hi
inoremap #def #define
inoremap #in #include <><ESC>i
inoremap np<Space> using namespace std;<CR>
inoremap nf #ifndef<CR>#define<CR><CR>#endif<ESC>3kea
map <C-A> <ESC>ggVG
"map <C-C> y
"map <C-V> p
inoremap class class ClassName {<CR>};<ESC>kE2lve
inoremap st<Space> struct {<CR>};<ESC>kEla
inoremap tp<Space> template <class T><CR>
inoremap if if () {<CR><CR>}//endif<ESC>02k2ei
inoremap ife if () {<CR><CR>} else {}<ESC>02k2ei
inoremap while while(){<CR><CR>}//endwhile<ESC>2khi
inoremap do do{<CR><CR>}while();<ESC>0ki<Tab>
inoremap try try{<CR><CR>}catch(){<CR>}<ESC>2ki<Tab>
inoremap for for(int i = 0;i < len; ++i){<CR><CR>}//endfor<ESC>2k10lve
inoremap switch switch(){<CR>case:break;<CR>case:break;<CR>default:break;<CR>}//endswitch<ESC>4kehi
inoremap main int main(int argc, char* argv[]){<CR><CR>return 0;<CR>}<ESC>2ki<Tab>
inoremap fn<Space> /*<CR><Tab>Describe:<CR><ESC>0i<Tab>Result:<CR><ESC>0i<Tab>Parameters: TypeName: Meaning<CR><Tab>arg:<CR><ESC>0i*/<ESC>4kEa
"user design strat
"compile star
function CompileRunGcc()
exec "w"
if &filetype == 'c'
exec "!gcc % -o %<"
exec "!./%<"
elseif &filetype == 'cpp'
exec "!g++ % -o %<"
exec "!./%<"
elseif &filetype == 'java'
exec "!javac %"
exec "!java %<"
elseif &filetype == 'python'
exec "!python %"
endif
endfunction
map <C-R> :call CompileRunGcc()<CR>
"compile end