一、括号自动完成与加强
1. 括号自动完成
功能描述:当输入(时自动生成(),并使光标指向),系统保持在insert mode分析:当键入(时,只需模拟输入()并使光标回退一个字符即可
代码1:
inoremap ( ()<LEFT>
2. 重复键入括号自动换行
功能描述:在目标一的基础上实现若光标前一字符为(,则自动换行并缩进,而非插入括号分析:要达到该效果,必需通过命令实现,调用命令有<C-O>,<ESC>, <C-R>三种途径
<C-O>对于eol与普通字符的处理方式不一样,所以这里采取ESC进入normal模式,<ESC>离开Insert模式恒回退一个字符
代码2:功能一的命令版
function! ParenOpen() normal! a() startinsert endfunction inoremap ( <ESC>:call ParenOpen()<CR>
代码 3:实现功能2
function! ParenOpen() let line = getline('.') let prev_char = line[col('.')-1] if prev_char == '(' " 添加额外的字符;,以避免vim自动删除空白行 execute "normal! a\<CR>\<ESC>==O;" return end " 同样需要添加; execute "normal! a(;)\<ESC>i" "当缩进被删除时,重新缩进当前行 if line == '' normal! ==$h end endfunction inoremap ( <ESC>:call ParenOpen()<CR>"_cl
3. 忽略重复键入的右括号
功能描术:若当前字符为),则忽略输入的),光标指向下一字符代码4
function! ParenClose() let line = getline('.') let char = line[col('.')] if char == ')' execute "normal! l" else normal! a) end endfunction inoremap ) <ESC>:call ParenClose()<CR>a
4. 配对删除括号
功能描述:当删除(时,若()之间为空时,则连)一起删除分析:目前只能想到map <BS> 一条途径,通过正则判断括号间是否为空
代码5
function! ParenDelete() let line = getline('.') let prev_char = line[col('.')-1] if prev_char == '(' && match(line,'^\s*)',col('.')) != -1 " 使用 cf) 代替df)使光标离开normal时左移一格用以a normal! cf) else execute "normal! a\<BS>" end endfunction inoremap <BS> <ESC>:call ParenDelete()<CR>a
二、代码总览:
function! ParenOpen() let line = getline('.') let prev_char = line[col('.')-1] if prev_char == '(' " 添加额外的字符;,以避免vim自动删除空白行 execute "normal! a\<CR>\<ESC>==O;" return end " 同样需要添加; execute "normal! a(;)\<ESC>i" "当缩进被删除时,重新缩进当前行 if line == '' normal! ==$h end endfunction function! ParenClose() let line = getline('.') let current_char = line[col('.')] if current_char == ')' execute "normal! l" else normal! a) end endfunction function! ParenDelete() let line = getline('.') let prev_char = line[col('.')-1] if prev_char == '(' && match(line,'^\s*)',col('.')) != -1 " 使用 cf) 代替df)使光标离开normal时左移一格用以a normal! cf) else execute "normal! a\<BS>" end endfunction " 函数ParenOpen执行后光标指向;,使用"_cl清除并进入insert模式 inoremap ( <ESC>:call ParenOpen()<CR>"_cl inoremap ) <ESC>:call ParenClose()<CR>a inoremap <BS> <ESC>:call ParenDelete()<CR>a
三、使用<C-R>代替<ESC>
<ESC>调用时会导致状态栏,-- 插入 -- 闪烁,修正代码为使用<C-R>代替<ESC>通过与=表达式寄存器实现括号的自动完成功能{/text}
脚本正好可以不进入Normal模式,如果函数中有normal xxx,那么不得不使用<ESC>作为入口了
function! ParenOpen() let line = getline('.') let prev_char = line[col('.')-2] if prev_char == '(' return "\<CR>\<ESC>==O" end return "()\<Left>" endfunction function! ParenClose() let line = getline('.') let current_char = line[col('.')-1] if current_char == ')' return "\<Right>" end return ')' endfunction function! ParenDelete() let line = getline('.') let prev_char = line[col('.')-2] if prev_char == '(' && match(line,'^\s*)',col('.')-1) != -1 return "\<Left>\<C-O>cf)" end return "\<BS>" endfunction inoremap <silent> ( <C-R>=ParenOpen()<CR> inoremap <silent> ) <C-R>=ParenClose()<CR> inoremap <silent> <BS> <C-R>=ParenDelete()<CR>
四、Vim插件Auto Pairs
Auto Pairs是根据此文进一步完善的插件。支持[]{}() ' "的括号自动完成与删除。详见:https://github.com/jiangmiao/auto-pairs
2011-06-11更新
-------------------
inoremap X <C-R>=foo()<CR> 可以用inoremap <expr> X<CR>代替
即上文可以改进为
inoremap <silent> <expr> ( ParenOpen() inoremap <silent> <expr> ) ParenClose() inoremap <silent> <expr> <BS> ParenDelete()
相关推荐
一、vim python自动补全插件:pydiction 可以实现下面python代码的自动补全: 1.简单python关键词补全 2.python 函数补全带括号 3.python 模块补全 4.python 模块内函数,变量补全 5.from module import sub-...
SourceInsight与vim代码补全配置
集中了VIM大中小括号自动补全,代码自动补全,窗口列表等功能
插入按自动补全,检索方便,鼠标可操作,括号自动配对添加,代码折叠..更多惊喜要体验后才知道哦 要括号自动配对添加,.vimrc中需加这几句 (注意,从window贴过去可能会在每行后有^M就是\r ,需要去掉才行) set ...
可以括号自动补全,自动缩进,语法高亮,允许鼠标定位代码,显示信息可以实现中文显示,F7可以实现编译运行,F8可以实现c,c++的代码调试。
【使用说明】在主目录直接解包就行 【功能详情】--------快捷键 ...3.双引号、单引号、大括号自动补全,小括号不能自动补全【如果有人发现是什么原因,可以留言哈】 【注】祝大家更高效的玩转vim
"Plugin 'jiangmiao/auto-pairs' "自动成对操作括号 Plugin 'mbbill/undotree' "撤销修改 "Plugin 'gdbmgr' "调试器插件 Plugin 'scrooloose/nerdcommenter' "快速注释/反注释插件 "Plugin 'Yggdroot/indentLine' ...
使用了该vimrc配置文件, vim编辑器将有以下优点 快捷键优点 : F5 自动编译C/C++文件 F8 自动调试C/C++文件 F2 清除空行 F3 列出当前文件目录 Ctrl + P 自动补全 Ctrl + A 全选复制 ...括号 单双引号自动补全
自动匹配括号,自动补全一些代码(\fn: 当前文件名; \fe:当前文件名+后缀;tt当前时间) 自动载入保存fold(折叠)信息 --------------------------------------------------------------- tl: 显示taglist wm:...
j24.3j 自动补全 j24.4j 重复录入 j24.5j 从其它行复制 j24.6j 插入一个寄存器的内容 j24.7j 缩写 j24.8j 键入特殊字符 j24.9j 键入连字符 j24.10j Normal模式命令 jusr 25.txtj 编辑格式化文本 j25.1j 段行 j25.2j ...
Sublime Text3 是一个轻量、简洁、高效、跨平台的编辑器,方便的配色以及兼容vim快捷键等各种优点,它可跨平台支持Windows/Mac/Linux;支持32与64位操作系统,...自动补全已经出现的单词;自动补全函数名),非常智能;
Ctrl+n 自动补全单词(向前查找)两者一般感觉不到区别 Ctrl+x Ctrl+k 通过字典补全单词 Ctrl+x Ctrl+t 从同义词典(thesaurus)补全 Ctrl+x Ctrl+f 文件名自动完成(很有用) Ctrl+x Ctrl+l 自动完成整行 Ctrl+x Ctrl+i ...
自动补全已经出现的单词;自动补全函数名),非常智能; 相比于难于上手的Vim,浮肿沉重的Eclipse,VS,即便体积轻巧迅速启动的Editplus、Notepad++,在SublimeText 3面前大略显失色,无疑这款性感无比的编辑器是...
文件 编码程序猿的专属vimrc配置! 该vim配置拥有各种大气的被动和主动技能!! 一分钟极速安装(如果是windows,强烈推荐安装 ) ...各种自动补全(php,html,括号) 编辑多个文件时显示标签 保存时自动检查php文
Sublime Text 是一个轻量、简洁、高效、跨平台的编辑器,方便的配色以及兼容vim快捷键等各种优点博得了很多前端开发人员的喜爱!Sublime Text 这款程序员必备...自动补全已经出现的单词;自动补全函数名),非常智能。
Sublime Text 是一个轻量、简洁、高效、跨平台的编辑器,方便的配色以及兼容vim快捷键等各种优点博得了很多前端开发人员的喜爱!Sublime Text 这款程序员必备...自动补全已经出现的单词;自动补全函数名),非常智能;
Sublime Text 是一个轻量、简洁、高效、跨平台的编辑器,方便的配色以及兼容vim快捷键等各种优点博得了很多前端开发人员的喜爱!Sublime Text 2这款程序员必备...自动补全已经出现的单词;自动补全函数名),非常智能;
Sublime Text 是一个轻量、简洁、高效、跨平台的编辑器,方便的配色以及兼容vim快捷键等各种优点博得了很多前端开发人员的喜爱!Sublime Text 2这款程序员必备...自动补全已经出现的单词;自动补全函数名),非常智能;
能够做到代码高亮、自动补全,语法检测,代码折叠,可配置键盘事件,vim, emacs, sublime text 风格、能完成查找替换,括号匹配,分栏显示,显示行号,自行配置字体大小和风格 最基本功能,需引入codemirror.js和...
24.3 自动补全 24.4 重复录入 24.5 从其它行复制 24.6 插入一个寄存器的内容 24.7 缩写 24.8 键入特殊字符 24.9 连体字 24.10 Normal模式命令 第25章 编辑格式化的文本 25.1 断行 25.2 对齐文本 25.3 缩进和制表符 ...