Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何改进此vim映射以格式化/对齐类似行_Vim - Fatal编程技术网

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

如何改进此vim映射以格式化/对齐类似行,vim,Vim,最近,我需要一种更快的方法来根据一个公共字符格式化类似的代码行(通常是=)。例如,我想格式化以下内容: myVar = getMyVar(); myLongerVar = getMyLongerVar(); myYetLongerVar = getMyYetLongerVar(); 为此: myVar = getMyVar(); myLongerVar = getMyLongerVar(); myYetLongerVar = getMyYetLongerVar();

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

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>
“用于查找公共字符的查询。在本例中,我将其设置为“查找=”
设g:defformatquery=“f=”
“将当前行设置为具有更长的大小,直到公共字符
nnoremap gm 0
\:执行“正常”。g:defformatquery
\:设b:epos=getpos(“.”[2]
“根据上面获取的位置格式化当前行
nnoremap g=0
\:执行“正常”。g:defformatqueryhvgeld
\:执行“正常”。(b:epos-getpos(“.”[2])。“i”
要使用它们,我必须执行以下步骤(假设
是我的
):

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

    有什么想法吗?

    你应该试试这个

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

    :Align =
    
    或从第34行到第39行对齐:

    :34,39Align =
    

    你知道tablar.vim吗?@Michael也很不错!我认为这个插件解决了我的问题:)对于没有插件的小但相对通用的对齐技巧,请参阅我的问题“”。