vim 自动在操作符 前后加上空格 C语言
function! Align_Space()
let current_line = getline('.') let replacement = substitute(current_line,'\([a-zA-Z0-9_]\)\([!|^&=<>%*/+-]\)','\1 \2','g')
let newline = substitute(replacement,'\([!|^&=<>%*/+-]\)\([a-zA-Z0-9_]\)','\1 \2','g')
let replacement = substitute(newline,'\([^&]\)\(\s*\)\(&\)\s*\([a-zA-Z0-9_]\)','\1 \3\4','g')
let newline = substitute(replacement,'\s\+->\s\+','->','g') let replacement = newline if '"' == matchstr(replacement,'"')
let newline = substitute(replacement,'\s\+%\s\+','%','g')
else
let newline = replacement
endif call setline('.',newline) if newline != current_line
call cursor(line('.'),col('.') + 1)
endif
endfunction
autocmd CursorMovedI *.[ch] call Align_Space()
公司编码规范要求操作符前后添加空格,否则报错
为防止疏漏,动手写了一个简单的vim函数
使用正则表达式替换的原理 实现 在输入操作符时,自动为操作符前后添加空格
替换使用了反向引用原理
()a-zA-Z0-9_ 匹配 操作符前后可能出现的 字符
!|^&=<>%*/+- 匹配操作符
对vim的感想:
1 vim的文档还是不够全面,不知道substitute 是否有参数 能够不移动光标
2 如果在函数中return 则autocmd CursorMovedI 配置的 函数不会再次被调用,除非退出再进入插入模式。
遗留问题:
#include<stdio.h> 以及 ++ 的情况 依然添加了空格感觉怪怪的
vim 自动在操作符 前后加上空格 C语言的更多相关文章
- Linux中设置vim自动在运算符号两边加上空格
vim中设置自动在=+-之类的运算符号左右两边加上空格.原版的vim不带这个功能,写出的代码例如z=x+y,不美观,很多编译器(如VS)能够自动在符号两边加上空格,如z = x + y,看起来比较美观 ...
- [No000018F]Vim自动缩进配置、原理和tab键替换空格-Vim使用技巧(4)
一.Vim缩进介绍 在没有设置Vim自动缩进的条件下,可以手动使用Vim命令对特定行进行缩进处理.在Vim插入模式下,按下 Tab 键时默认会输入一个制表符,可通过Vim配置项将 Tab 替换为空格, ...
- Vim自动补全神器–YouCompleteMe
YouCompleteMe的特别之处 基于语义补全 总所周知,Vim是一款文本编辑器.也就是说,其最基础的工作就是编辑文本,而不管该文本的内容是什么.在Vim被程序员所使用后,其慢慢的被肩负了与IDE ...
- 【转】Vim自动补全插件----YouCompleteMe安装与配置
原文网址:http://www.cnblogs.com/zhongcq/p/3630047.html 使用Vim编写程序少不了使用自动补全插件,在Linux下有没有类似VS中的Visual Assis ...
- Vim自动补全插件----YouCompleteMe安装与配置
Vim自动补全插件----YouCompleteMe安装与配置 使用Vim编写程序少不了使用自动补全插件,在Linux下有没有类似VS中的Visual Assist X这么方便快捷的补全插件呢?以前用 ...
- vim自动补全插件YouCompleteMe
前言 Valloric/YouCompleteMe可以说是vim安装最复杂的插件之一,但是一旦装好,却又是非常好用的.YouCompleteMe简称ycm 在安装折腾的过程中,我再一次的体会到,除了官 ...
- VIM自动补全插件 - YouCompleteMe--"大神级vim补全插件"
VIM自动补全插件 - YouCompleteMe 序言 vim 之所以被称为编辑器之神多半归功于其丰富的可DIY的灵活插件功能,( 例如vim下的这款神级般的代码补全插件YouCompleteMe) ...
- Vim 自动文件头注释与模板定义
Vim 自动文件头注释与模板定义 在vim的配置文件.vimrc添加一些配置可以实现创建新文件时自动添加文件头注释,输入特定命令可以生成模板. 使用方法 插入模式输入模式输入seqlogic[Ente ...
- Vim自动补全神器YouCompleteMe的配置
简介:YouCompleteMe号称Vim的自动补全神器,该项目在github的地址:YouCompleteMe:以下在10.0.1 build-1379776平台配置完成 插件安装操作: 1.确保V ...
随机推荐
- 【Beta】阶段 第四次Daily Scrum Meeting
每日任务 1.本次会议为第四次 Meeting会议: 2.本次会议在周四下午16:40,课间休息时间在陆大楼召开,召开本次会议为10分钟. 一.今日站立式会议照片 二.每个人的工作 (有work it ...
- 201521123117 《Java程序设计》第7周学习总结
1. 本周学习总结 2.书面作业 Q1.ArrayList代码分析 1.解释ArrayList的contains源代码 源代码: //contains()方法 public boolean conta ...
- 201521123071 《JAVA程序设计》第六周学习总结
第6周-接口.内部类与Swing 1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想进行一个总结. 注1:关键词与内容不求多 ...
- 201521123071 《JAVA程序设计》第九周学习总结
第九周-异常 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 此处仅部分知识点归纳 2. 书面作业 1. 常用异常,题目5-1 1.1 截图你的提交结果(出现学号) ...
- 201521145048《Java程序设计》第11周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 2. 书面作业 本次PTA作业题集多线程 Q1.互斥访问与同步访问 完成题集4-4(互斥访问)与4-5(同步访问) ...
- Java十二周总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将Student对象(属性:int id, String name,int age,doubl ...
- 201521123092《java程序设计》第14周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多数据库相关内容. 2. 书面作业 1. MySQL数据库基本操作 建立数据库,将自己的姓名.学号作为一条记录插入.(截图,需出现自 ...
- Junit4学习(一)新建Junit4工程
一,学习Junit4,学以致用 二,熟悉编写流程 工具:Eclipse,Junit包,hamcrest.core包 1,打开Eclipse开发工具,新建工程:file->Java Project ...
- php中文分词
主要列出现知道的几个工具: 1,scws中文分词支持php7 http://www.xunsearch.com/scws/index.php 2,phpanalysis中文分词,主要使用了机械分词方法 ...
- Exception in thread "main" org.hibernate.MappingException: You may only specify a cache for root
如果出现类似下面的错误: Exception in thread "main" org.hibernate.MappingException: You may only speci ...