Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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

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
Regex 在vim中轻松对齐空格后的字符_Regex_Vim_Cursor - Fatal编程技术网

Regex 在vim中轻松对齐空格后的字符

Regex 在vim中轻松对齐空格后的字符,regex,vim,cursor,Regex,Vim,Cursor,我想创建一个映射的vim命令,帮助我跨多行对齐变量的赋值。假设我在一个文件中有以下文本: foo = 1; barbar = 2; asdfasd = 3; jjkjfh = 4; baz = 5; 如果我选择多行并使用下面的正则表达式,注意第10列是所有行的空白,第10列后面的空白将被删除,直到等号为止 :'<,'>s/^\(.\{10}\)\s*\(=.*

我想创建一个映射的vim命令,帮助我跨多行对齐变量的赋值。假设我在一个文件中有以下文本:

foo                     = 1;
barbar            = 2;
asdfasd    = 3;
jjkjfh                = 4;
baz              = 5;
如果我选择多行并使用下面的正则表达式,注意第10列是所有行的空白,第10列后面的空白将被删除,直到等号为止

:'<,'>s/^\(.\{10}\)\s*\(=.*\)$/\1\2/g
在执行可视块选择并在正则表达式中使用该列时,是否有方法获取当前光标位置(特别是列位置)

或者,如果可以找到所选行上任何等号的最大列,并插入空格,以便所有等号按列对齐,则最好解决前面的问题。想象一下快速转换:

foo = 1;
barbar = 2;
asdfasd = 3;
jjkjfh = 4;
baz = 5;
致:


有一个块选择和一个键组合。

有两个插件:旧的,或者。

不完全满足于表格和对齐,我最近构建了另一个类似但更简单的插件,名为

查看演示屏幕:

对于第一种情况,只需目视选择行并输入命令
:EasyAlign=
,即可完成此操作

如果已定义映射,例如

vnoremap <silent> <Enter> :EasyAlign<cr>
可以使用“:EasyAlign*\”命令轻松对齐,或使用上述映射,输入、
*
,然后按空格键对齐

final  int     foo = 3;
public boolean bar = false;
没有插件 在这种情况下

foo = 1
fizzbuzz = 2
bar = 3
可以使用宏添加多个空格:

0f=10iSPACEESCj

其中10是一个任意数字,只是为了增加足够的空间

应用宏M次(对于M行)并获取

然后使用一个宏删除多余的空格,该宏将删除所有字符,直到某些列N:

0f=d12 | j

其中12是要对齐的列号,|是竖线(SHIFT+\)。12 |是一个“转到第12列”命令

对每一行重复上述步骤,并获取

foo        = 1
fizzbuzz   = 2
bar        = 3
可以将两个宏组合为一个宏:


0f=10ispacescd11 | j

您可以做的一件事是删除可视块开头的空白,如下所示:
:“表格非常好:对于您的示例,您只需在块的任何一行上执行
:Tab/=
。这正是我所需要的。你知道如何让它在两行“final int foo=3”和“public boolean bar=false”中对齐每个标记吗?我到处闲逛,但运气不太好。
final  int     foo = 3;
public boolean bar = false;
foo = 1
fizzbuzz = 2
bar = 3
foo           = 1
fizzbuzz           = 2
bar           = 3
foo        = 1
fizzbuzz   = 2
bar        = 3