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
Emacs 什么';告诉VI读/写带有软制表符和指定缩进的源文件的语法是什么?_Emacs_Vim_Vi - Fatal编程技术网

Emacs 什么';告诉VI读/写带有软制表符和指定缩进的源文件的语法是什么?

Emacs 什么';告诉VI读/写带有软制表符和指定缩进的源文件的语法是什么?,emacs,vim,vi,Emacs,Vim,Vi,我在某处看到一段代码,告诉vi使用软标签并设置标签的大小。如果您将此代码段放在源文件的底部,那么vi将神奇地为该文件使用这些设置 在源文件中包含该代码段的语法和规则是什么?emacs也可以使用这些设置吗?据我所知,vi没有这种功能。你很可能想到了维姆。emacs中也有类似的功能,您可以将其放入文件中 请注意,至少在Vim中,Modeline有过漏洞历史。这主要是因为有问题的选项被专门列入黑名单,而不是只允许在modelines中设置特定的变量子集。我建议使用一个插件,比如 将它放在C++源文件中

我在某处看到一段代码,告诉vi使用软标签并设置标签的大小。如果您将此代码段放在源文件的底部,那么vi将神奇地为该文件使用这些设置


在源文件中包含该代码段的语法和规则是什么?emacs也可以使用这些设置吗?

据我所知,vi没有这种功能。你很可能想到了维姆。emacs中也有类似的功能,您可以将其放入文件中


请注意,至少在Vim中,Modeline有过漏洞历史。这主要是因为有问题的选项被专门列入黑名单,而不是只允许在modelines中设置特定的变量子集。我建议使用一个插件,比如

将它放在C++源文件中:

// vim: set ft=cpp
ex: set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: 

查找字符串“
vim:
”,然后执行以下操作。注意:如果您不信任正在打开的文件,这可能会打开潜在的漏洞,因此在启用此功能之前请三思。

请查看
:h modeline

例如:

/* vim: ai set sw=4 ts=4 */

请参阅
:h modeline
,了解Vim将检查文件中modeline信息的行数。默认设置是检查前5行。

您可以将其放入源文件的注释中:

// vim: set ft=cpp
ex: set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: 
注释语法取决于源文件的类型

对于C/C++/Java,这将是:

// ex: set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: 
<%-- ex: set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: --%>
对于JSP,这将是:

// ex: set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: 
<%-- ex: set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: --%>

如果将它放在源文件的开头,它就可以工作,但是如果将它放在源文件的末尾,我不确定它是否也可以工作

这对emacs不起作用。对于emacs,可能有一种不同的方法来实现同样的效果。

好的,首先,在RealVI中,您可以在.exrc文件中实现这一点

第二,使用

set autoindent tabstop=8 shiftwidth=4

因为否则vi将插入它认为只有4个字符宽的标签。生成的文本文件在任何其他编辑器中看起来都没有意义。

“modelines”是要在文件开头和结尾检查的行数。您错过了我最喜欢的“et”。让战争开始吧!将
集合
放在选项列表的开头是否更为传统?
ex
是一种不太常见(尽管完全有效)的modeline前缀。更常见的是
vim
<代码>vi也可以工作。请注意,前面必须有一个空白字符,因此这里的第一个示例实际上不起作用,但第二个示例起作用。(当然,vim本身并不关心注释语法。)基于下面答案的一些实验表明,它不仅仅是添加行。一个问题是,您需要
:设置modeline modelines=5
,以使Vim最多扫描5行modeline符号。另一个问题是,即使设置了这些选项,
vim
在编辑C文件时也不一定接受modeline控件,即使在编辑“非类型化”文件时完全相同的modeline工作正常(我使用
junk
作为非类型化文件,使用
qs07int.C
作为C文件)。我不确定是什么覆盖了modeline。