如何改进此vim映射以格式化/对齐相似的行

时间:2012-04-27 19:39:04

标签: vim

最近我需要一种更快的方法来根据一个共同的字符(通常是=)格式化相似的代码行。例如,我想格式化:

myVar = getMyVar();
myLongerVar = getMyLongerVar();
myYetLongerVar = getMyYetLongerVar();

进入那个:

myVar          = getMyVar();
myLongerVar    = getMyLongerVar();
myYetLongerVar = getMyYetLongerVar();

然后我写了以下映射:

" query used to find the common character. In this case i'm setting it to "find the ="
let g:defformatquery = "f="

" set current line as having the longer size till the common character
nnoremap <Leader>gm 0
            \:execute "normal " . g:defformatquery<CR>
            \:let b:epos = getpos(".")[2]<CR>

" format current line according to the position acquired above
nnoremap <Leader>g= 0
            \:execute "normal " . g:defformatquery<CR>hvgeld
            \:execute "normal " . (b:epos - getpos(".")[2]) . "i "<CR>

要使用它们,我必须执行这些步骤(假设,是我的<Leader>):

  1. 将光标放在=符号前面的较长文本的行中(提供示例中的第三行,myYetLongerVar
  2. 按:,gm
  3. 对于我要格式化的每一行,将光标放在那里并按,g=
  4. 虽然这有效,但这个过程有点慢。 我想创建一个能够一次格式化整个选定区域的函数。然后我可以为函数创建一个映射。

    有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您应该尝试Align plugin

例如,要根据=符号对齐某些选定的行(使用 v CTRL-v 选择),只需键入:

:Align =

或者从第34行到第39行对齐:

:34,39Align =