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+=对齐,效果如下:

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

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

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

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

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

效果如下:

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

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

上一篇:VIM 中鼠标选择不选中行号


下一篇:MathType中如何实现上下两行公式“=”号对齐