欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Ruby学习笔记二帮助生成Vim添加代码头的代码

程序员文章站 2022-04-28 17:57:20
脚本语言真是太强了。 我的目的是把我的默认代码头功能加到vim里面。 /********************************************...

脚本语言真是太强了。

我的目的是把我的默认代码头功能加到vim里面。

/******************************************************************************
*  copyright notice
*  copyright (c) 2014 all rights reserved
*  ----stay hungry stay foolish----
*
*  @author  : shen
*  @name   :
*  @file   : g:\my source code\defaultcode.cpp
*  @date   : 2014/06/14 02:44
*  @algorithm :
******************************************************************************/

//#pragma gcc optimize ("o2")
//#pragma comment(linker, "/stack:1024000000,1024000000")

#include <bits/stdc++.h>
#include <cmath>
#include <cstdio>
#include <string>
#include <cstring>
#include <iomanip>
#include <iostream>
#include <algorithm>
using namespace std;
template<class t>inline bool updatemin(t& a, t b){ return a > b ? a = b, 1: 0; }
template<class t>inline bool updatemax(t& a, t b){ return a < b ? a = b, 1: 0; }

/*//stl
#include <map>
#include <vector>
#include <list>
#include <stack>
#include <deque>
#include <queue>
*/

/*//computational geometry
#include <complex>
#define x real()
#define y imag()
typedef complex<double> point;
*/

typedef long long int64;

void solve()
{

}

int main()
{

 return 0;
}

用ruby10行就搞定了字符串的处理。简直爽爆了。

def load( path )
 file.foreach(path) do |line|
  line["\n"] = ""
  str = "let l = l + 1 | call setline(l, \'#{line}\')"
  file.open("s.txt", "a") do |f|
   f << "#{str}\n"
  end
 end
end

load("defaultcode.cpp")

最后人工把头尾一加,搞定了。

"f4 添加文件头
map <f4> :call titledet()<cr>
function addtitle()
let l = 0
let l = l + 1 | call setline(l, '/******************************************************************************')
let l = l + 1 | call setline(l, '*  copyright notice')
let l = l + 1 | call setline(l, '*  copyright (c) 2014 all rights reserved')
let l = l + 1 | call setline(l, '*  ----stay hungry stay foolish----')
let l = l + 1 | call setline(l, '*')
let l = l + 1 | call setline(l, '*  @author  : shen')
let l = l + 1 | call setline(l, '*  @name   :')
let l = l + 1 | call setline(l, '*  @file   : '.expand("%:p:h")."\\".expand("%:t"))
let l = l + 1 | call setline(l, '*  @date   : '.strftime("%y/%m/%d %h:%m"))
let l = l + 1 | call setline(l, '*  @algorithm :')
let l = l + 1 | call setline(l, '******************************************************************************/')
let l = l + 1 | call setline(l, '')
let l = l + 1 | call setline(l, '//#pragma gcc optimize ("o2")')
let l = l + 1 | call setline(l, '//#pragma comment(linker, "/stack:1024000000,1024000000")')
let l = l + 1 | call setline(l, '')
let l = l + 1 | call setline(l, '#include <bits/stdc++.h>')
let l = l + 1 | call setline(l, '#include <cmath>')
let l = l + 1 | call setline(l, '#include <cstdio>')
let l = l + 1 | call setline(l, '#include <string>')
let l = l + 1 | call setline(l, '#include <cstring>')
let l = l + 1 | call setline(l, '#include <iomanip>')
let l = l + 1 | call setline(l, '#include <iostream>')
let l = l + 1 | call setline(l, '#include <algorithm>')
let l = l + 1 | call setline(l, 'using namespace std;')
let l = l + 1 | call setline(l, 'template<class t>inline bool updatemin(t& a, t b){ return a > b ? a = b, 1: 0; }')
let l = l + 1 | call setline(l, 'template<class t>inline bool updatemax(t& a, t b){ return a < b ? a = b, 1: 0; }')
let l = l + 1 | call setline(l, '')
let l = l + 1 | call setline(l, '/*//stl')
let l = l + 1 | call setline(l, '#include <map>')
let l = l + 1 | call setline(l, '#include <vector>')
let l = l + 1 | call setline(l, '#include <list>')
let l = l + 1 | call setline(l, '#include <stack>')
let l = l + 1 | call setline(l, '#include <deque>')
let l = l + 1 | call setline(l, '#include <queue>')
let l = l + 1 | call setline(l, '*/')
let l = l + 1 | call setline(l, '')
let l = l + 1 | call setline(l, '/*//computational geometry')
let l = l + 1 | call setline(l, '#include <complex>')
let l = l + 1 | call setline(l, '#define x real()')
let l = l + 1 | call setline(l, '#define y imag()')
let l = l + 1 | call setline(l, 'typedef complex<double> point;')
let l = l + 1 | call setline(l, '*/')
let l = l + 1 | call setline(l, '')
let l = l + 1 | call setline(l, 'typedef long long int64;')
let l = l + 1 | call setline(l, '')
let l = l + 1 | call setline(l, 'void solve()')
let l = l + 1 | call setline(l, '{')
let l = l + 1 | call setline(l, ' ')
let l = l + 1 | call setline(l, '}')
let l = l + 1 | call setline(l, '')
let l = l + 1 | call setline(l, 'int main()')
let l = l + 1 | call setline(l, '{')
let l = l + 1 | call setline(l, ' ')
let l = l + 1 | call setline(l, ' return 0;')
let l = l + 1 | call setline(l, '}')
endfunction

"更新最近修改时间和文件名
function updatetitle()
 call setline(8, '*  @file   : '.expand("%:p:h")."\\".expand("%:t"))
 call setline(9, '*  @date   : '.strftime("%y/%m/%d %h:%m"))
endfunction

"判断前10行代码里面,是否有copyright notice这个单词,
"如果没有的话,代表没有添加过作者信息,需要新添加;
"如果有的话,那么只需要更新即可
function titledet()
 let n = 2
 "默认为添加
  let line = getline(n)
  let str = '^*  copyright notice$'
  if line =~ str
   call updatetitle()
   return
  endif
 call addtitle()
endfunction