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_Plugins_Editor - Fatal编程技术网

对齐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)