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

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+(.*)'

效果如下:

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

转载于:https://www.cnblogs.com/hyaray/p/6663508.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值