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+(.*)'
效果如下:
想修改对齐规则,则要自己设置正则了。