VIM:使用特定的格式选项编辑代码,使用不同的格式选项保存/提交

VIM:使用特定的格式选项编辑代码,使用不同的格式选项保存/提交

程序员团队很少会就格式化选项达成一致,例如制表符与空格、换行符上的花括号和其他选项。有没有办法让 VIM 在打开和写入时自动解析文件(即使通过 tidy 等外部实用程序),以便我编辑像这样:

if ( something != other ) {
    Console.WriteLine("Var: {0}", something);
} else {
    Console.WriteLine("Just some code");
}

然而该文件已保存像这样:

if ( something!=other )
{
    Console.WriteLine("Var: {0}", something);
}
else
{
    Console.WriteLine("Just some code");
}

这与打开和写入的两个方向的转换相关。

答案1

在您的职业生涯中,您会遇到各种格式样式。我的建议是习惯它——学会让您的样式适应您正在处理的文件的样式。除其他原因外,从一种样式转换为另一种样式的工具通常不会在不改变文件的情况下完成往返,这使得使用类似工具查看diff您所做的实质性更改变得困难。

尽管如此,Vim 提供了许多钩子来在读取和写入文件时执行命令。请参阅

:help autocommand

例如,

au BufWrite * %s/\s\+$//

将在将缓冲区写入磁盘之前删除其尾随空格。该命令可以是任何 ex 命令,包括调用函数或通过外部程序过滤整个缓冲区。

BufWrite 事件在缓冲区写入之前触发。它的另一个名称是 BufWritePre。如果您想要写入缓冲区,然后撤消在 BufWritePre 事件中所做的更改,则可以使用 BufWritePost 命令来恢复这些更改。BufRead(又名 BufReadPost)事件可用于触发命令,在读取文件时以您想要的方式格式化文本。

* 将匹配任何文件名。您可以使用以下文件名模式。C,.cpp 仅当读取或写入某些类型的文件时才触发自动命令。

再举一个例子,

au BufRead *.[ch] normal gg=G

将根据 C 缩进规则重新缩进您读取的任何 C 源文件。请参阅

:help =
:help C-indenting

答案2

要调整实际制表符缩进的大小,可以使用指令tabstop.vimrc我将我的设置为 3

set tabstop=3

答案3

查看这个插件:https://github.com/Chiel92/vim-autoformat

看起来它正是你要找的东西。它通过外部格式化程序只需按一下按钮即可格式化你的源文件。

相关内容