Vim Lisp模式硬编码为两个空格缩进

2022-02-13 14:29:20

当我在插入模式下键入(如果<;enter>;)时,会创建一个缩进为两个空格的新行。我的设置中没有任何关于两个空格的内容,那么为什么我不能获得一个制表符?在插入模式下,我可以使用什么设置来更改缩进?

更新:感谢您的回答,设置不会被覆盖。这与"有关;默认lisp缩进";。在:help lisp中,它说明了如何更改cpoptions中的p标志。以下是cpoptions标志帮助中的内容:

与p-Vi兼容的Lisp缩进。如果不存在,则使用稍好一点的算法。

设置它会将缩进更改为一个空格,而不是两个空格。但仍然不确定如何将其更改为其他内容。

2我和#39;我不熟悉lisp,但看起来Vim处理lisp缩进是一个特例。你可以看看:帮助';lisp';。

多亏了gdupras,我查看了lisp的帮助,设法得到了一个不同的缩进,但不确定如何将其更改为我想要的。

看起来这是两个空格缩进是一种硬编码行为:set lisp mode忽略shiftwidth。

我们可以将其追溯到包含硬编码量+=2的源代码;增量语句。

它';这是有充分理由的;它已经成为书写Lisp的主要方式。

在我写这个答案时,我浏览了以下项目的源代码示例(所有Lisp或类似Lisp的语言):

除了两个空格缩进,我没有发现任何一个例子!有了两个空格缩进,你就有了好的/大的同伴。你还是习惯吧;即使你以某种方式让Vim跟随你的方式,如果你向任何人上游任何东西';如果是Lisp项目,则可能需要重新格式化。

现在,我已经看到Lisp代码使用了四个空格缩进,就像在非常古老的代码库和一些书中一样。

这可能发生在缩进是四个空格的情况下,但I';我指的是对齐,而不是四格缩进。当然,这种格式是函数参数的标准格式,但对于if之类的运算符,则存在争议。有些人喜欢这样的代码库。例如,这个机构';s随机找到的编码风格指南推荐这种写if的方式,同时也推荐两个空格缩进。

设置lispwords=。。。参数包含一个逗号分隔的标识符列表,这些标识符遵循类似运算符的缩进,这意味着两个空格而不是类似函数的对齐方式:第二行和第三行与参数对齐。默认情况下,在lispwords中可以找到if。

Lisp模式还对函数应用两个空格缩进(即,如果没有参数,lispwords中未列出的表单):

那';s也";规范的";。如果你';我们试图符合一些最大的线长度;有时,通过将所有参数向下移动,只需给它们两个空格缩进,就可以使运行超过限制的函数调用符合要求。

每个文件类型在vim中都可以有自己的设置。所以你的。vimrc值可以在文件类型插件中被覆盖。要了解lisp文件类型设置的当前值,请打开lisp文件并在vim命令行中运行以下命令:

如果它们与中的不同。vimrc,那么你的值会在某个插件中被覆盖。

要用自定义值再次覆盖它们,请创建~/。vim/after/ftplugin/lisp。具有所需值的vim文件:

2通过使用verbose->;,您可以找到更改设置的位置:详细设置noexpandtab?。在你的东西被覆盖的地方,没有必要进行猜测。但我同意你的看法,它很可能是文件类型插件。

设置不是';它没有被覆盖,所以它一定在其他地方。我没有';我看不到口齿不清的东西。关于缩进的vim文件,但这也可能是因为该文件读起来非常混乱:-)。

点击“发布您的答案”,即表示您同意我们的服务条款、隐私政策和cookie政策

不是你的答案';你在找什么?浏览其他问题或问自己的问题。