免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1638 | 回复: 0
打印 上一主题 下一主题

vim 的宏及一些特定用法的记录 [复制链接]

论坛徽章:
1
2015亚冠之塔什干火车头
日期:2015-07-13 12:36:28
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-02-20 16:05 |只看该作者 |倒序浏览
平时常用vim写bash脚本,写perl脚本.
一直想让vim能自动添加一些文件,加入一些作者信息,日期,描述之类的东西.就想用vim的宏功能来解决这个问题.
在~/.vimrc文件里面加入:let @m = "i#!/b^Huse^Hr/bin/perl^M^M# page ^["   注释: ^M 是CR,即回车符         ^[ 是ESC键         ^H 是退格键.(我这里输错好几个地方,所以按了几个退格键)
保存退出.随便新建一个文件直接输入@m,看看有什么?
这个语句可以自己写.也可以生成.用vim的宏生成方法如下:新建一个文件,按q              // 开始录制宏再按u            // 这是宏的名字然后就可以输入一些内容或者你常用的一些动作.完事后按esc键推出到命令模式再按q结束宏的录制,这样,刚才的操作过程就录制到了名字为u的宏中.
接下来就是看看宏的内容了,也就是上面所谓的生成宏的代码.在命令行里输入"up            // 双引号+宏名+p看到代码了把?复制粘贴到.vimrc中把.格式:let @宏名 = "代码"
下次使用的时候,直接输入@m就可以插入这些信息   注:我曾经想让它在新建一个文件的时候,自动加入,成是成功了.但是带来一个不能接受的后果.就是每次打开文件的时候也会插入.......--!,就是在vimrc中加入一行内容@m           // 这里有个问题,就是这样调用,会西安进入末行模式,不是命令行             // 模式,所以宏并不会起作用,需要在代码前面加入^M,及esc,退出             // 到命令行模式才行.
寻思着能不能加入一个判断语句.但是无果.
其实到这里也已经能用了,但是这个@符号是我最不喜欢打的符号之一.麻烦.幸运的是今天无意中发现一个更好的方法.
再vimrc中加入如下代码:"进行版权声明的设置
"添加或更新头
map  ms:call TitleDet()'s
function AddTitle()
        call append(0,"#####################################################")
        call append(1,"#")
        call append(2,"#                Author: jason - jasonyy77@163.com")
        call append(3,"#")
        call append(4,"#                     QQ : 285642427")
        call append(5,"#")
        call append(6,"# Last modified: ".strftime("%Y-%m-%d %H:%M"))
        call append(7,"#")
        call append(8,"#            Filename: ".expand("%:t"))
        call append(9,"#")
        call append(10,"#     Description: 没有什么,就是一些练习.")
        call append(11,"#")
        call append(12,"####################################################")
        echohl WarningMsg | echo "Successful in adding the copyright." | echohl None
endf
"更新最近修改时间和文件名
function UpdateTitle()
        normal m'
        execute '/# *Last modified:/s@:.*$@\=strftime(":\t%Y-%m-%d %H:%M")@'
        normal ''
        normal mk
        execute '/# *Filename:/s@:.*$@\=":\t\t".expand("%:t")@'
        execute "noh"
        normal 'k
        echohl WarningMsg | echo "Successful in updating the copy right." | echohl N
one
endfunction
"判断前10行代码里面,是否有Last modified这个单词,
"如果没有的话,代表没有添加过作者信息,需要新添加;
"如果有的话,那么只需要更新即可
function TitleDet()
        let n=1
        "默认为添加
        while n 代码来源:http://www.vimer.cn/2010/01/用vim在代码文件中自动添加ifdefdefineendif.html
我稍为改了一下头信息.改成自己的了.希望作者不要介意.还可以做一些修改.但是我觉得这个已经很不错了.只需要改动一个文字就OK.3Q作者
用法很简单了.
创文件的时候按下F4就可以了.修改好文件的时候,按F4还可以更新修改里面的时间       // 这点很强大
至于里面的语法.和其它语言也差不多.详细的.google vim脚本
下面有一个很好的连接:
Vim 实用技术,第 1 部分: 实用技巧
Vim 实用技术,第 2 部分: 常用插件
Vim 实用技术,第 3 部分: 定制 Vim
随便说一些宏真是一个很好的东西:
下面举几个例子:一个文件100行,需要把1,2行合并,3,4行合并,依次类推.合并行都知道是J.用宏:quJjq            // 到这里宏录制完成100@u        // 执行100次宏.多的会退出,没有关系结果如何?
例二:一个文件100行,删除奇数行.用宏:quddjq50@u
再加两个选项:
set numberset tabstop=4
我觉得很有用,其它的选项可有可无.google一下一大把.
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/111905/showart_2182891.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP