vim使用过程中遇到的一系列问题

2015-5-12

今天根据网上的教程自己写了一个属于自己的头文件,整理了一下贴上来

"自动生成头文件

<span style="font-size:14px;">autocmd BufNewFile *.php,*.css,*.js,*.html exec ":call SetTitle()" 
autocmd BufNewFile * normal Gki    (这里有四个空格)
function SetCommon()
	call setline(1,"/********************************")
   	call append(line("."),"/* File Name:".expand("%"))
   	call append(line(".")+1,"/* Author:Kien Shin")
   	call append(line(".")+2,"/* Email:1034131477@qq.com")
   	call append(line(".")+3,"/* Create Time:".strftime("%Y-%m-%d %H:%M"))
   	call append(line(".")+4,"/********************************")
endfunction
function SetTitle()
	if &filetype == 'php'
        call SetCommon()
   	    call append(line(".")+5,"<?php")
   	    call append(line(".")+6,"    ")
    	call append(line(".")+7,"?>")
    endif
	if &filetype == 'html'
		call setline(1,"<!DOCTYPE html>")
    	call append(line("."),"<html lang=\"zh-CN\">")
    	call append(line(".")+1,"<head>")
    	call append(line(".")+2,"<meta content=\"text/html; charset=gb2312\" http-equiv=\"Content-Type\">")
    	call append(line(".")+3,"<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">")
    	call append(line(".")+4,"<title></title>")
    	call append(line(".")+5,"<meta content=\"\" name=\"Keywords\">")
    	call append(line(".")+6,"<meta name=\"description\" content=\"\" />")
    	call append(line(".")+7,"</head>")
    	call append(line(".")+8,"")
    	call append(line(".")+9,"<body>")
    	call append(line(".")+10,"")
       	call append(line(".")+11,"</body>")
    	call append(line(".")+12,"</html>")
	endif
    if &filetype == 'js' "js文件居然无法自动生成头文件,做了好多实验都不行,真奇葩!
        call SetCommon()
    endif
    if &filetype == 'css'
        call SetCommon()
    endif
endfunction</span>
代码解释:

首先我定义了,当新文件被打开时且是指定文件时自动调用SetTitle()这个函数(这里要提醒大家的是,如果你在BufNewFile后面添加多个文件类型,这几个文件类型一定要用逗号隔开,且不可以有空格,有些朋友良好的代码习惯总是喜欢写成比如×.php, *.html, *.js, *.css,非常抱歉这么好的代码习惯在vimrc配置文件里面不适用!它会报错:没有标记:(   请大家一定要牢记)

然后网又指定了调用SetTitle()函数后的新文件自动使用Gki+四个空格,意思就是自动跳到文件结尾,然后向上退一行进入编辑模式,打上四个空格

接下来我定义了通用函数SetCommon(),这是为了方便后面被SetTitle()调用,这个函数里面主要写的就是最基本的一些注释信息,比如文件名字/作者名字/邮箱地址/创建时间等等,大家也可以根据自己的实际需要,自行添加,当然,如果你有别的注释需求,比如有些语言的注释不是用/***********这样去注释的,for example,就像如果你有要编写注释类似############这样的需求,也可以写到SetCommon()这个函数之中,方便后期的持续开发

后面的SetTitle()函数主要是继续SetCommon()这个基函数进行各个类型文件个别编写,比如我给×.php文件添加了<?php ?>这样的简单注释,那么我以后写PHP文件就不需要管这个了,再比如我给HTML文件写好了基础模板格式,那么以后网就只需要定义到要写代码的地方就好了,这里我刚才代码第二行上面写的那个自动执行Gki可能会出错,大家记得自己改一下,比如给那个加个IF语句什么的,或者分门别类写就行了,太晚了,加上人懒,困,想早点写完早点睡觉去:)

好的这个函数的大概就是这么多

接下来解释几个vim的基本函数(因为我发现现在网络上要找vim语法实在太难了,找到了也是全英文的,不方便没有英语基础的人阅读,我会不定期写几个函数的大概意思,让大家能够明白怎么用,PS:因为VIM官网对每个函数的解释都好长- -|||本人实在不可能全部翻译过来,那又是另一项工作了)

autocmd 顾名思义auto 就是自动的意思cmd就是指令的意思,合起来就是自动执行的指令,这个(呃。。。叫函数还是命令?)函数很强大,它后面能跟好多东西,不光BufNewFile这一个,实在是冰山一脚,它强大到什么程度?如果你能力达标,你可以利用它实现包括语法检查,自动运行,自动添加,智能添加,自动索引反正是一个无所不能的函数,个人认为不代表任何人。

BufNewFile 这个其实是autocmd里面的一个参数,除了它比如还有autocmd-events autocommand-events BufReadPre BufRead BufReadCmd BufFilePre BufFilePost等等,很多很多的参数,这些参数就是autocmd的强大体现所在!而BufNewFile这个命令的大概意思就是“打开的窗口里面是一个新的文件”

exec 这个是autocmd选择了操作文件后的后续命令,它用来执行一些命令比如我写的函数。除了我上面写的函数以外,还有比如autocmd BufNewFile  *.c      0r ~/vim/skeleton.c这样的用法,就是当打开的新文件是C文件时自动去调用~/vim/skeleton.c这个文件过来。用法还有挺多,请大家参见

AUTOCMD

function 这个大家都明白的,声明函数

call 这个函数很好理解,呼叫!就是传呼某个代码片段啥的,具体我还没研究过,这里我是用它写了个代码片段

setline 这个函数顾名思义,设置行,就是让你写上你要的东西

append 这个函数就是继续添加的意思,有了setline就用这个继续往上加,如果你第二行也有内容的话。

line(".")+n 这个函数里面的“.”大概意思就是个连字符,目前没有研究过,后面加的数字就是个行数的排序

到这里我的个人注释头文件讲解已经进入尾声了,这里给大家拓展一下,比如你可以用这种方法写你需要的特定注释法,你可以用autocmd去写一个自动语法检查,或者比如说自动提示功能等,请大家参加VIM官方的各种函数说明自由发挥!

最后几个疑惑留在这里,目前我还没找到答案,百度也不怎么行,我用的是ubuntu15.04 VIM - Vi IMproved 7.4:

1.为什么我将 function BufNewFile normal Gki   写在函数里面,企图在自动调用SetTitle()函数时自动调用就不成功呢?

2.为什么所有文件都能够自动生成注释头,可是JS文件就偏偏不行呢?



为什么我无法将vim里面的代码复制到网站 博客什么的地方呢?

根据这个问题我在网络上搜索了很久,终于找到了解决方法

我目前用的linux版本是ubuntu15.04 kylin版,所以如果你也是这个版本,正巧也碰到了这样的问题,那个恭喜,完美适合你,如果不是这个版本的linux也可以试一下这个方法,说不定能成呢!好废话不多说,爆方法:

首先我在网的vimrc文件里面写上了set mouse=v,这个代码帮助我们可以用鼠标选择复制(还有一个set mouse=a这个是让鼠标能够任意移动,但是与前者冲突,所以目前被我舍弃),可是这个方法还是不方便,为什么呢?因为当你需要整页整页的复制代码的时候,它总是会跳掉,因为它一翻页功能就会消失了。

好的嘛,俺当然是个追求极致的好码农!当然不能将就!于是网又在百度里面努力的搜索,值得欣慰的是经过努力我找到了两个不错的blog网页,里面对vim的复制粘贴说的非常详细,现在推荐给大家

Vim 复制粘贴探秘

ubuntu下vim中内容复制到浏览器

这两个网址对大家应该会有帮助。于是,网按照后者的方法查看了我的vim版本,发现我的版本为巨型版本,于是网就将set clipboard=unnamedplus这个代码写到了我的vimrc文件里面。却奇怪的发现不起作用,百思不得解啊!明明是巨型的版本,也支持clipboard怎么还是不行呢?好吧,死马当活马医吧!我就用sudo apt-get install vim-gnome命令安装了vim-gnome,再进去的时候发现居然可以了!完美复制!于是我又开始了v+jjjjjjjjjjjjjjjjjjjjjjj+y p的美好生活六:)     (如果复制到浏览器或者别的什么地方的话用ctrl+v,话说vim用多了容易打出能多的hjklw- -|||怎么办,有时候这也是个问题啊!)

好了,罗嗦这么多简单步骤就是:

1.set mouse=v

2.set clipboard=unnamedplus

3.sudo apt-get install vim-gnome



为什么我输入不了,逗号和\反斜杠啊?可是我看别人的代码里面明明在用这个符号做命令啊?

    答案:往往提这样的问题的朋友一定是刚接触vim而且用过了很多:冒号开头的命令了,想当然的就以为逗号和反斜杠也是这样输入进去的,可往往在输入时却会发现根本打不进去,其实, \这两个符号的使用不像:冒号这样是直接在命令模式下输入的,而是需要你按住之后再输入你的命令,比如在我的.vimrc文件中有这么一条配置文件cnoremap <silent> <leader>bv :BufExplorerVerticalSplit<cr>这条命令的意思是让:BufExplorerVerticalSplit这个命令映射成 ,bv,并且这条命令只有在命令模式下才能使用,而且不进行递归,好我们来拆解以下这条命令c(命令模式)nore(不进行递归处理)map(映射) <silent>(默认) <leader>(此为一个符号我把他定义成了逗号)bv(你想要变成的命令) :BufExplorerVerticalSplit(原命令)<cr>(回车)

   好,那么我再解释一下为什么<leader>会是个逗号呢?因为我在我的.vimrc文件里面还配置了let mapleader = "," 的这样一句话,意思就是我我把<leader>这个符号配置成逗号,当然你也可以配制成其他符号,比如\
    关于vim的各种模式以及按键我们可以参考http://haoxiang.org/2011/09/vim-modes-and-mappin/


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值