如何使用Modeline在Vim中进行文件特定的设置更改

虽然插件无疑是Vim最大的优势之一,但还有其他一些功能使其成为当今Linux用户最强大,功能最强大的文本编辑器/ IDE之一。 这些功能之一是能够进行文件特定的设置更改。 可以使用编辑器的Modeline功能访问此功能。

在本文中,我们将讨论如何使用Vim的Modeline功能使用易于理解的示例。

But before we start doing that, it's worth mentioning that all the examples, commands, and instructions mentioned in this tutorial have been tested on Ubuntu 16.04, and the Vim version we've used is 7.4.

VIM模式

用法

正如我们已经提到的,Vim的Modeline功能允许您进行文件特定的更改。 例如,假设要用空格替换项目特定文件中使用的所有选项卡,并确保所有其他文件不受此更改的影响。 这是一个理想的用例,其中Modeline可帮助您达成您想做的事情。

所以你可以做的是,你可以把以下一行放在文件的开始或结尾:

# vim: set expandtab:

有很高的机会,如果您尝试进行上述练习来测试Linux机器上的用例,则事情将无法正常工作。 如果是这样的话,不要担心,因为在某些情况下首先需要激活Modeline功能(由于安全原因,默认情况下在Debian,Ubuntu,Gentoo和OSX等系统上被禁用)。

要启用此功能,请打开.vimrc文件(位于主目录中),然后将以下行添加到该文件中:

set modeline

现在,每当您输入选项卡并保存文件(其中输入了expandtab modeline命令时),该选项卡将自动转换为空格。

让我们考虑另一个用例。 假设Vim中的默认选项卡空间设置为4,但对于特定文件,您希望将其增加到8.为此,您需要在文件的开头或结尾添加以下行:

// vim: noai:ts=8:

现在尝试输入一个标签,你会看到它覆盖的空格数将是8。

你可能已经注意到我说这些模型命令需要被输入到靠近文件顶部或底部的地方。 如果你想知道为什么会这样,原因是这个功能是这样设计的。 以下行(取自官方Vim文档)应使此更为清楚:

模型不能在文件中的任何位置:它必须在前一行或最后几行中,vim检查模型的确切位置由modelines变量控制;参见:帮助模型 ,默认情况下设置为5线 “。

这里是:help modelines命令(上面提到的)说:

If 'modeline' is on 'modelines' gives the number of lines that is checked for set commands. If 'modeline' is off or 'modelines' is zero no lines are checked.

尝试将modeline命令超出默认的5行(从底部或顶部)的范围,您会注意到,选项卡空间将恢复为Vim默认值 - 在我的情况下为4个空格。

但是,如果需要,可以使用.vimrc文件中的以下命令来更改此行为。

set modelines=[new-value]

例如,我将价值从5增加到10。

set modelines=10

这意味着现在我可以把modeline命令放在文件的第一行或最后10行之间。

在任何时候,在编辑文件的同时,您可以输入以下内容(使用Vim编辑器在命令模式下)可查看当前的模型相关设置以及最后一次设置的位置。

:verbose set modeline? modelines?

例如,在我的情况下,上述命令产生以下输出:

 modeline
Last set from ~/.vimrc
modelines=10
Last set from ~/.vimrc

以下是您需要了解的关于Vim的Modeline功能的一些重要信息:

  • 默认情况下,启用此功能的Vim以不兼容(非Vi兼容)模式运行,但是某些值得注意的Vim发行版可以在系统vimrc中禁用此选项以实现安全性。
  • 默认情况下,该功能在以root身份编辑时被禁用(如果您使用'sudo'打开了该文件,那么没有问题 - 功能可用)。
  • 使用' set' ,模型结束于第一个冒号,而不是后面的反斜杠。 没有' set' ,没有文字可以跟随选项。 例如, / * vim:noai:ts = 4:sw = 4 * /是一个无效的模型。

安全问题

可悲的是,Vim的Modeline功能可以用来危及安全性。 事实上,过去已经报告了多个安全相关的Modeline问题,包括shell命令注入任意命令执行未经授权的访问等等。 同意,大多数都是旧的,现在已经修复了,但它确实提出了一个想法,即Mouseine可能被黑客滥用。

结论

Modeline可能是Vim编辑器的高级功能,但不难理解。 毫无疑问,有一点学习曲线涉及,但是这个功能是多么有用,但这不算太多。 当然,存在安全问题,这意味着在启用和使用该功能之前,您应该权衡您的选项。

你有没有使用过Modeline功能? 你的经历怎么样? 与我们分享(和整个youcl社区)在下面的评论。

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏