首页 > 系统服务 > 详细

Vim中根据正则对选中文本对齐(比如ini文件的=号对齐)

时间:2017-04-03 20:47:10      阅读:463      评论:0      收藏:0      [点我收藏+]

vimrc增加如下内容即可:

vnoremap <M-=> :call Duiqi(‘\v(^\s*\S+)\s+(.*)‘)<CR>  
  
"reg匹配的第2段文字对齐  
function! Duiqi(reg)  
    let l0 = line("‘<")  
    let l1 = line("‘>")  
    "获取第1个单词及前面空格的最大长度  
    let max = 0  
    let arr = {}  
    let l = l0  
    while l <= l1  
        let arr[l] = matchlist(getline(l), a:reg) "把字符串分成2段  
        let len = strlen(arr[l][1])  
        let max = (len > max ? len : max)  
        let l += 1  
    endwhile  
    let max += 1 "最长的后面要放一个空格  
    "设置strSpace  
    let strSpace = CreateSpaces(max)  
    "开始对齐  
    let l = l0  
    while l <= l1  
        call setline(l, arr[l][1].strpart(strSpace, 0, max-strlen(arr[l][1])). arr[l][2])  
        let l += 1  
    endwhile  
endfunction  
  
"生成n个空格的字符串  
function! CreateSpaces(n)  
    let s = ‘‘  
    for i in range(a:n)  
        let s .= ‘ ‘   
    endfor  
    return s  
endfunction  

  

函数参数用的正则表达式,例子中的正则是根据每行的第2个单词对齐,
主要就是两个()内匹配的内容。
使用方法:要先选中要对齐的行,再按Alt+=对齐,效果如下:

技术分享

如果前面有空格,则效果如下:

技术分享

如果想去除最前面的空格,修改参数为

‘\v^\s*(\S+)\s+(.*)‘

效果如下:

技术分享

想修改对齐规则,则要自己设置正则了。

Vim中根据正则对选中文本对齐(比如ini文件的=号对齐)

原文:http://www.cnblogs.com/hyaray/p/6663508.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!