如何在vi中对齐代码(大括号,parens等)?

时间:2010-04-06 18:50:34

标签: format vi alignment

你如何在vi中美化/对齐/格式化代码?命令是什么?

我已经粘贴了一大堆代码,我需要将它全部格式化/对齐...显然我是一个新手。

X

3 个答案:

答案 0 :(得分:45)

我的回答中的这些命令在vim中工作。大多数认为他们正在使用vi的人正在使用vim。要查明你的'vi'是否真的是'vim',请打开vi并输入:version - 如果它是vim,它会这样说。否则,您可能只看到没有程序名称的版本号。此外,当您第一次打开vim时,您通常会看到某种类型的闪屏,其中显示“VIM - VI iMproved”......

自动缩进

要打开自动缩进,请确保vim知道您正在编辑的文件类型(它通常会自动从文件扩展名中检测到这一点,但可能无法通过某些文件类型找出它)。您可以使用语法突出显示的菜单告诉它文件类型。然后,这样做:

:filetype indent on

您可以使用

禁用自动缩进
:filetype indent off

自动调整/更正缩进

通常, = {motion} 会将代码与缩进级别对齐。

  • == 对齐当前行
  • =i{ 对齐内部块
  • =% 与光标下匹配的括号/括号对齐
  • =14j 14== 对齐后续14行
  • =G 与文件末尾对齐
  • vG= 同样的事情,对齐到结尾 文件(但使用可视模式)
  • vjjj= 对齐四行(使用可视模式)

手动缩进

如果vim没有正确猜测缩进级别,有两种方法可以更改它:

  • 如果您处于正常模式(一切都是命令),请执行 << 向左移动一行,或 >> 将其右移一个标签。您可以使用我在上面显示的相同移动命令(例如, >i{ 缩进当前内部代码块),使用多行来执行此操作。
  • 如果您处于插入模式,则可以通过执行 Ctrl-T 进一步缩进行(不移动光标),或者使用 Ctrl-D <取消缩进一个选项卡/强>

对齐等号等

如果要在声明列表中对齐等号,则应考虑使用此vim脚本:http://www.vim.org/scripts/script.php?script_id=294

调整缩进/标签尺寸

如果你希望vim在缩进时使用空格而不是制表符,请运行此命令(或考虑将其添加到vimrc文件中)

 :set expandtab

要设置与标签相等的空格数,我通常会这样做:

 :set expandtab softtabstop=3 tabstop=3 shiftwidth=3
  • tabstop - 标签计算的列数(影响现有标签字符的显示)
  • shiftwidth - 用&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;和&gt;&gt;,以及其他命令。
  • softtabstop - 按Tab键时要插入多少空间
  • expandtab - 将标签键展开到空格

但是如果你必须经常使用不同数量的标签,你也可以使用这个功能和键绑定:

function! Ktabs(tabsize)
    execute "set softtabstop=" . a:tabsize . " tabstop=" . a:tabsize . " expandtab shiftwidth=" . a:tabsize
    "set softtabstop=a:tabsize tabstop=a:tabsize expandtab shiftwidth=a:tabsize
endfunction
noremap <leader><Tab> :call Ktabs(3)<Left>

如果您正在编辑包含制表符和空格混合的文件,则可能需要在设置制表符大小后使用此命令:

:retab

答案 1 :(得分:5)

={motion}

:h =

P.S。如果vim可用,则不应使用vi。

答案 2 :(得分:4)

如果手动调整缩进,我将在我要重新缩进的第一行或最后一行打开一个带有V的可视块,移动到包含该块的大括号,转到另一个大括号%然后使用><

来换行

如果缩进很多,我将使用<一直移动所有内容,并使用.重复,然后重新缩进所有内容。

另一种解决方案是使用Your problem with Vim is that you don't grok vi.fmt

中所述的unix {!}fmt命令