如果我有一个像这样的文本文件:
alpha: 1
beta: 2
gamma: 3
delta: 4
epsilon: 5


评论

请参阅vi.stackexchange.com/questions/20658/…的公认答案。

@ D.BenKnoble在2015年提出了这个问题,您提供链接的问题是在2019年提出的。

@MaximKim很清楚。我链接的问题有一个可以接受的答案。无论如何,其中一个应该作为另一个的封闭。这似乎是将人们指向答案的更便捷的方法。

#1 楼

请参阅接受的答案以基于单个字符对齐代码块

回顾



ggVG选择全部

:'<,'>normal f:5a,您不必输入'<,'>,也不必在末尾注明空格。对于选择中的每一行,它将执行常规命令查找:并在其后添加5个空格
转到epsilon: <here>之后的第二个空格,然后按<C-v>激活块可视模式

5k选择一个字符列直到第一行

<重复1次

.重复它直到一切都对齐

PS



评论


除了:normal f:5a,您还可以使用:s /:/:/

–马特
19年7月25日在10:16

实际上,可以使用:s /:/:/代替。 (不幸的是,5个空格被裁剪掉)

– Maxim Kim
19年7月25日在10:42



#2 楼

您可以使用vim-lion插件执行此操作。

安装它,然后将光标放在第一行。在正常模式下,输入glip/。系统将提示您键入一种模式,因此只需键入\d以匹配任何数字,然后按Enter。它将为您排列数字。

评论


实际上,这可以通过lion.vim定义的gL运算符来完成。该运算符通过在对齐字符的右边添加空格(而不是像gl运算符一样,在左边)来执行对齐。完整的命令将是gLip:。

–tommcdo
2015年2月7日在21:53

#3 楼

这是一种不使用任何插件的方法。策略是使用制表符作为临时列定界符,然后将制表符重新格式化为空格。


首先设置:set noexpandtab(简称noet

文本,使用Tab键在每个冒号后面插入一个水平制表符。可能看起来有点错误,像这样: >
alpha:  1
beta:   2
gamma:  3
delta:  4
epsilon:        5


但是,空格实际上是水平制表符,而不是空格。

:set tabstop=9表示要使用空格而不是制表符。然后,:set ts=9执行制表符到空格的转换。


评论


这不是理想的,因为这只会改变vim中选项卡的可视化方式,如果其他人在不同的编辑器中打开文件,效果会不佳。

–德鲁瓦·萨加尔(Dhruva Sagar)
2015年2月8日下午5:49

@DhruvaSagar怎么样?步骤4中的制表符到空格转换后,结果完全相同。

– 200_success
2015年2月8日在6:41



不同的编辑器以不同的方式显示/处理选项卡。

–德鲁瓦·萨加尔(Dhruva Sagar)
2015年2月8日,12:34

好的,我想我忽略了步骤4。对不起,我的错。

–德鲁瓦·萨加尔(Dhruva Sagar)
15年2月8日在14:58

#4 楼

这是另一种不使用任何插件的方法。

首先用更大的空格替换空格。无需精确:只需将Space键捣碎一遍: >
:%s/ /        /


唯一棘手的部分是知道要使用的计数。对于此示例,这很容易,最长的行包含7个字母的单词:epsilon加2个其他字符(冒号和空格),因此您需要使用9 + 1的计数。

更复杂的对齐方式可能会因在状态行中显示当前光标位置(或使用类似getcurpos())而受益。

或者,您可以手动将光标定位在每行上并使用正常模式手动dw。

还可以在宏中使用此技术:

:%norm! 10|dw


#5 楼

您可以尝试以下插件:vim-easy-align。

#6 楼

如果您使用的是Unix环境,则可以运行

%!column -t


但是如果您使用的是Windows,并且已安装git,则意味着您可以使用已安装的精美的unix工具:)可以在这里找到grep,tee,它和列之类的工具: :

%localappdata%\Programs\Git\usr\bin


#7 楼

我试图解决问题的尝试

vip ............... select paragraph
:'<,'>!column -t    align
:%norm $X ......... remove one space