对齐vim中等号上的文本
我倾向于在等号上对齐代码,以提高可读性。由此:对齐vim中等号上的文本,vim,plugins,editor,Vim,Plugins,Editor,我倾向于在等号上对齐代码,以提高可读性。由此: $ = jQuery.sub() Survey = App.Survey Sidebar = App.Sidebar Main = App.Main 为此: $ = jQuery.sub() Survey = App.Survey Sidebar = App.Sidebar Main = App.Main 在vim中有没有一种简单的方法可以做到这一点?我相信这个插件很容易做到 在视觉模式下选择实际上不需要的范围,然后执行以下
$ = jQuery.sub()
Survey = App.Survey
Sidebar = App.Sidebar
Main = App.Main
为此:
$ = jQuery.sub()
Survey = App.Survey
Sidebar = App.Sidebar
Main = App.Main
在vim中有没有一种简单的方法可以做到这一点?我相信这个插件很容易做到 在视觉模式下选择实际上不需要的范围,然后执行以下操作:
:Tabularize /=
该插件通常可以自己找到正确的范围,而不需要直观地选择它或为ex命令指定范围。我找到的最好的插件是 最简单的安装方法是使用插件,然后将tabulargit存储库克隆到~/.vim/bundle/Tabular。病原体自述中的完整说明 安装后,使用它只需将光标放在要对齐并运行的段落中的某个位置:
:Tab /=
这不是最简单的方法,但是它可以在没有任何插件的情况下完成 使用V和:s/=/=/在每个等号之前插入一组空格。 使用Ctrl-V选择要将等号移动到的列。
按下列表的另一个插件: 从文档中: 例如,glip=将打开
$i = 5;
$username = 'tommcdo';
$stuff = array(1, 2, 3);
进入
$i = 5;
$username = 'tommcdo';
$stuff = array(1, 2, 3);
您可以使用对齐这些块,例如通过键入
vip:Align =
在命令模式下,当光标放置在要对齐的块内时
其中vip进入虚拟模式并选择当前段落。Align命令功能非常强大,例如,您还可以指定多个模式,模式被解释为正则表达式等。安装插件并将gist修改为以下内容:
inoremap <silent> : :<Esc>:call <SID>align(':')<CR>a
inoremap <silent> = =<Esc>:call <SID>align('=')<CR>a
function! s:align(aa)
let p = '^.*\s'.a:aa.'\s.*$'
if exists(':Tabularize') && (getline(line('.')-1) =~# p || getline(line('.')+1) =~# p)
let column = strlen(substitute(getline('.')[0:col('.')],'[^'.a:aa.']','','g'))
let position = strlen(matchstr(getline('.')[0:col('.')],'.*'.a:aa.':\s*\zs.*'))
exec 'Tabularize/'.a:aa.'/l1'
normal! 0
call search(repeat('[^'.a:aa.']*'.a:aa,column).'\s\{-\}'.repeat('.',position),'ce',line('.'))
endif
endfunction
插件也可以做到这一点。以下是给出的众多示例之一:
对于不需要安装插件的简单解决方案,只需通过Unix column命令进行筛选 注意,根据您的column命令是否支持-o,有两种方法可以做到这一点 GNU列命令Linux等
:% ! column -t -s= -o=
就这样
BSD列命令Mac OS X等
第一步,通过-t列过滤:
第二步,删除分隔符周围的填充:
:%s/ = /=/
首字母为
$ = jQuery.sub()
Survey = App.Survey
Sidebar = App.Sidebar
Main = App.Main
第一步之后,它就变成了
$ = jQuery.sub()
Survey = App.Survey
Sidebar = App.Sidebar
Main = App.Main
第二步之后呢
$ = jQuery.sub()
Survey = App.Survey
Sidebar = App.Sidebar
Main = App.Main
或者,如果您想一步到位:
:% ! column -t | sed 's/ = /=/'
有关更多信息,请访问手册栏。来自:
如果您在紧要关头想要对齐表达式,而不必安装和学习任何插件,这里有一个快速的方法
选择视觉选择上的线条。例如,如果这是整个缓冲区,可以使用GGVG,但是如果这些行位于文件的中间,只需适当选择即可。也许是V4j?
在=(可以使用:normal f=9i)之前插入足够的空格。注意末尾的空格。这将在视觉选择的行中的每个=之前添加9个空格。如果9还不够,添加99或999之类的数字即可。请注意,当您使用可视选择键入:时,Vim将自动插入范围,因此实际命令是:“通过向vimrc添加一行,您只需选择文本并键入即可
:Aleq
把这个放在你的vimrc中:
command! -range Aleq execute <line1>.",".<line2> . "! sed 's/=/=TMPXX/'| column -t -s=| sed 's/TMPXX\s*/= /'"
这个插件工作得很好!您也可以在视觉模式下键入Tab以对齐突出显示的文本。我想我找到了一种更简单的方法:@你找到了比我在这里描述的更简单的方法?如果是这样的话,你能把它作为一个答案贴在这里吗?@Alexarvey我想你的意思是你发现其他答案中的一个比这个更容易。在任何情况下,如果你有任何有用的信息还没有发布在这里,请确保发布它。谢谢。不,我的意思是我找到了一种不用安装插件的新方法,正如我在上面的一个新答案中解释的那样。我不知道你为什么看不到这一点,但这里有一个直接的链接:@AlexHarvey-Yup,我错过了。我的错,对不起。这很好,不需要第三方工具!不知道为什么有人否决了它,因为它完全可以工作。应该注意的是,正如在这个答案中所写的,它将对齐整个缓冲区/文件。如果您只想对齐缓冲区的一部分,可以将%替换为如下所示的范围:!column-t-s=-o=或只需进行选择,按:并键入!column-t-s=-o=您应该以:'
command! -range Aleq execute <line1>.",".<line2> . "! sed 's/=/=TMPXX/'| column -t -s=| sed 's/TMPXX\s*/= /'"
'<,'>! sed 's/=/=TMPXX/'| column -t -s=| sed 's/TMPXX\s*/= /'
x = 32
yyy = (z == 64)
zzzz = f(x = 32)