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

Xof*_*ofo 27 format vi alignment

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

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

X

Kim*_*son 45

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

自动缩进

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

:filetype indent on
Run Code Online (Sandbox Code Playgroud)

您可以使用禁用自动缩进

:filetype indent off
Run Code Online (Sandbox Code Playgroud)

自动调整/纠正缩进

一般来说,={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
Run Code Online (Sandbox Code Playgroud)

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

 :set expandtab softtabstop=3 tabstop=3 shiftwidth=3
Run Code Online (Sandbox Code Playgroud)
  • tabstop - 选项卡计数的列数(影响现有制表符的显示)
  • shiftwidth - 使用<<和>>以及其他命令控制reindentation大小.
  • 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>
Run Code Online (Sandbox Code Playgroud)

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

:retab
Run Code Online (Sandbox Code Playgroud)

  • 此外,如果您希望更改默认缩进级别,您可以:set shiftwidth = n和:set tabstop = n其中n是所需的空格级别. (3认同)

wRA*_*RAR 5

={motion}

:h =

PS如果vim可用,则不应使用vi.

  • 我将阅读基础知识......但你能解释一下这个命令吗?X (7认同)
  • `{motion}`是一个移动光标的命令,如`w`或`4j`.`=`命令应用于`{motion}`所涵盖的范围. (2认同)