`

增强Vim插件 close pairs的功能--回车跳出

    博客分类:
  • Vim
阅读更多

 

出于个人习惯,常用进输入多层括号时,想用回车逐层从内跳出。

如 print(intN.toString(|)) 逐层跳出。当然,对' " () [] {} 都有用:)

 

目前存在一些小问题:

1、当使用<del>删除右边的一个配对字符后,功能将失灵,返回普通模式 :)

2、如果要要强行找行,请使用 Shift+回车 

3、还有一些待发现:)

 

下面为源代码,修改部分已标出。

"==============================================================================

" closepairs.vim - Auto closes pairs of characters

"==============================================================================

"

" Author:   NoWhereMan (Edoardo Vacchi) <uncommonnonsense at gmail dot com>

" Version:  0.1

" URL:    http://www.flatpress.org/

" License:  Public Domain

"==============================================================================

 

 

"inoremap ( ()<left>

"inoremap { {}<left>

"inoremap [ []<left>

 

"by phoenix"

inoremap <expr> <Esc> <SID>esc()

inoremap <expr> <CR> <SID>cr()

 

vnoremap <leader>" "zdi"<c-r>z"

vnoremap <leader>' "zdi'<c-r>z'

vnoremap <leader>( "zdi(<c-r>z)

vnoremap <leader>[ "zdi[<c-r>z]

vnoremap <leader>{ "zdi{<c-r>z}

 

inoremap <expr> <bs> <SID>delpair()

 

inoremap <expr> ) <SID>escapepair(')')

inoremap <expr> } <SID>escapepair('}')

inoremap <expr> ] <SID>escapepair(']')

 

inoremap <expr> " <SID>pairquotes('"')

inoremap <expr> ' <SID>pairquotes("'")

inoremap <expr> ( <SID>pairquotes('(')

inoremap <expr> [ <SID>pairquotes("[")

inoremap <expr> { <SID>pairquotes("{")

 

 

 

function! s:delpair()

let l:lst = ['""',"''",'{}','[]','()']

let l:col = col('.')

let l:line = getline('.')

let l:chr = l:line[l:col-2 : l:col-1]

if index(l:lst, l:chr) > -1

return "\<bs>\<del>"

else

let l:chr = l:line[l:col-3:l:col-2]

if (index(l:lst, l:chr)) > - 1

return "\<bs>\<bs>"

endif

return "\<bs>"

endf

 

function! s:escapepair(right)

let l:col = col('.')

let l:chr = getline('.')[l:col-1]

if a:right == l:chr

return "\<right>"

else

return a:right

endf

"function! s:pairquotes(pair)

"let l:col = col('.')

"let l:line = getline('.')

"let l:chr = l:line[l:col-1]

"if a:pair == l:chr

"return "\<right>"

"else

"return a:pair.a:pair."\<left>"

 

"endf

 

"by phoenix

function! s:pairquotes(pair)

    let l:dict={'"':'"',"'":"'",'(':')','[':']','{':'}'}

let l:col = col('.')

let l:line = getline('.')


    if( a:pair=='"' || a:pair=="'")

        let l:chr = l:line[l:col-1]

    else

        let l:chr = ""

    endif


    if l:dict[a:pair]==l:chr

        if len(s:quotes)>0

            call remove(s:quotes,len(s:quotes)-1)

        endif

        return "\<right>"

    else

        call add(s:quotes,l:dict[a:pair])

        return a:pair.l:dict[a:pair]."\<left>"

    endif

endf


function! s:esc()

   let s:quotes=[]

  return "\<Esc>"

endf


function! s:cr()

    if !empty(s:quotes)

        let quote=s:quotes[len(s:quotes)-1]

        call remove(s:quotes,len(s:quotes)-1)

        return "\<esc>f".quote."i\<right>"

    else

        return "\<esc>o"

    endif

endf


let s:quotes=[]

分享到:
评论

相关推荐

    VMware-VIM-all-6.7.0-15976714.txt

    VMware-VIM-all-6.7.0-15976714 原版镜像 .................................................................................................................

    VMware-VIM-all-6.5.0-14020092.txt

    vmware vcenter6.5 for windows版本。 VMware-VIM-all-6.5.0-14020092

    Vim的auto-pairs插件

    auto-pairs是vim的一个极小的插件。它对于用vim来编写程序,提供了极大的便。我ubuntu16中,用vim编写c和c++程序,安装了此插件,极大地方便了代码的输入。 二、功能介绍: 它可以自动完成大括号、小括号、中括号、...

    eclipse插件包-vim-svn-adt-git-合集

    Eclipse中的Vim插件允许开发者在Eclipse环境中使用类似于Vim的编辑模式,提供了Vim的快捷键和功能,比如正常模式、插入模式和可视模式,使得习惯于Vim操作的用户在Eclipse中也能保持高效率。 2. **Subversion (svn-...

    vim-plug, 我的vim插件, 基于vim-plug安装.zip

    Vim-plug是一个轻量级且高效的 Vim 插件管理器,它允许用户方便地安装、更新和管理各种Vim插件。这个压缩包“vim-plug, 我的vim插件,基于vim-plug安装.zip”包含了Vim-plug的源代码,这将帮助你了解如何在你的Vim...

    vim插件----代码补全,高亮,文件浏览等等

    本篇文章将深入探讨如何利用Vim插件实现代码补全、语法高亮和文件浏览等功能。 一、代码补全 代码补全是现代开发环境中必不可少的一项功能,它能够帮助程序员快速输入代码,减少出错概率。在Vim中,我们可以使用`...

    vim-tmux-focus-events, 使终端vim和tmux更好地协同工作.zip

    vim-tmux-focus-events, 使终端vim和tmux更好地协同工作 tmux-focus-events.vimFocusGained 和 FocusLost 自动命令事件在终端vim中不工作。 这个插件在使用vim内部Tmux时恢复它们。以下是相关内容:vim fugitive插件...

    vim中verilog插件vlog-support.zip

    `vlog-support`是为Vim设计的一个插件,专门为了增强Verilog编程的体验。 **1. 插件安装** 首先,你需要将`vlog-support.zip`文件解压到你的Vim插件目录中。这个路径通常位于`~/.vim/`(对于Linux和macOS用户)或`...

    vim jeffy插件和配置

    linux下用vim编辑器配合jeffy插件实现比较顺手的编程环境。Jeffy插件和配置文件(.vim):代码高亮 自动提示等。 vim版本必须大于7.1。 1,备份下vim配置文件(可选) 2,解压jeffy-vim.zip 和里面的jeffy-vim-read.tar...

    VMware-VIM-all-6.7.0-9451876.txt

    VMware vSphere 6.7 百度网盘链接及提取 码

    VMware-VIMSetup-all-5.5.0-1312299

    - **插件支持**: VIM支持第三方插件,可以通过安装插件来增强功能或集成其他管理系统。 - **API接口**: 提供了丰富的API接口,方便开发者进行二次开发,实现自动化运维任务。 #### 5. **安全性** - **认证与授权...

    systemverilog.vim-1.9插件包

    Systemverilog.vim-1.9插件是专为Vim编辑器设计的一款增强工具,旨在提高SystemVerilog语言的开发效率和代码质量。SystemVerilog是一种广泛应用于集成电路(IC)设计领域的硬件描述语言,它提供了丰富的结构和行为...

    vim完整配置方案,解压可用,包含Vundle taglist.vim vim-airline The-NERD-tree

    amoscykl博主的Vim的终极配置方案,完美的写代码界面! ——.vimrc这篇帖子 ,还有我自己的修改和整理,有语法高亮,语句补全,显示行号,自动缩进等等功能。 还有创建源文件自动添加头文件的功能,例如写一个.c程序 ...

    blog.csdn.net-VIM配置vim-airline插件安装 - 最暖一天 - 博客频道

    其中,`vim-airline`插件就是一款非常实用的增强型状态栏插件,它可以提供更美观的状态栏显示,并支持多种自定义选项。 #### 二、vim-airline插件介绍 **vim-airline**是一款用于美化Vim状态栏的插件,它可以显示...

    vim8.0.zip --Linux-CentOS7离线安装VIM及相关依赖包

    Linux-CentOS7离线安装VIM及相关依赖包 vim-8.0.zip gpm-libs-1.20.7-6.el7.i686.rpm ncurses-5.9-14.20130511.el7_4.x86_64.rpm ncurses-base-5.9-14.20130511.el7_4.noarch.rpm ncurses-devel-5.9-14.20130511.el7...

    vim配置插件-dierge

    vim配置插件

    vim插件基础配置,vim-plug

    为了提升Vim的使用体验和功能,我们常常会安装各种插件。`vim-plug`是一个简洁且高效的Vim插件管理器,它使得安装、更新和管理Vim插件变得极其简单。下面将详细介绍如何使用vim-plug进行Vim插件的基础配置。 首先,...

    vim插件:omnicppcomplete-0.41.zip、taglist_46_vim.zip、vim-autocomplpop.zip三合一

    vim常用插件: 1. omnicppcomplete-0.41.zip 2. taglist_46_vim.zip 3. vim-autocomplpop.zip

    Atom-atom-vim-mode-plus-move-selected-text,像对象一样移动选定文本。贡献T9MD/原子.zip

    这个插件,"vim-mode-plus-move-selected-text",旨在让Atom用户在Vim模式下能像处理对象一样移动选定的文本块,增强了编辑体验。 在Vim模式下,通常可以使用可视模式选择文本,但这个插件允许你更灵活地移动这些...

    vim-ide.tar.bz2

    压缩包为直接打包/etc/vim配置及插件包。 root@ubuntu:/etc/vim# tree -L 2 . bundle ale auto-pairs echofunc gdbmgr indentLine LeaderF nerdcommenter nerdtree nerdtree-git-plugin quick-scope ...

Global site tag (gtag.js) - Google Analytics