4

VIM学习笔记 模式行(Modeline)

 2 years ago
source link: http://yyq123.blogspot.com/2020/06/vim-modeline.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

程序员对于制表符常常有不同的偏好,有的使用8个空格,而有的则使用4个空格。可以想见,如果使用不同设置的用户操作相同的文件,必将对文本格式造成影响。

如果希望针对特定文件应用特定的设置,那么修改全局性的vimrc配置文件就显得小题大做了;而使用模式行(modeline),则可以将选项设置配置在文件本身当中。

例如将以下模式行放置到文件开头,将在打开该文件时设置制表符为4个空格:

/* vim:set tabstop=4: */

启用模式行

默认设置下,‘modeline’选项是打开的,Vim将会在文件的开头5行和结尾5行中查找模式行:

:set modeline

如果希望改变扫描的行数,那么可以设置‘modelines’选项:

:set modelines=1

定义以下快捷键,可以启用模式行并自动应用到当前文件,而不需要重新打开文件:

:nnoremap <leader>ml :setlocal invmodeline <bar> doautocmd BufRead<cr>

模式行主要有以下两种格式:

(1)不包含set命令的格式

  • [text{white}]{vi:|vim:|ex:}[white]{options}
  • 模式行将持续到行尾处结束;
  • 选项之间不能包含空格。

以下为正确的模式行:

/* vim:tabstop=4:expandtabs:shiftwidth=4 */

以下模式行选项中包含空格,将报错“Error E518: Unknown option: */”:

/* vim: noai:ts=4:sw=4 */

(2)包含set命令的格式

  • [text{white}]{vi:|vim:|Vim:|ex:}[white]se[t] {options}:[text]
  • 模式行将在第二个“:”处结束;
  • 模式行的开头和结尾可放置任意字符,建议使用“/* */”;
  • 开头字符之后的空格为必需的分隔符,不可以省略;
  • 选项之间以空格分隔。

以下为正确的模式行:

/* vim: set ai tw=75: */

以下模式行开头字符之后缺少空格,将无法生效,但不会报错:

/*vim: set tabstop=4: */

模式行实例

在Vim帮助文件的末尾,将发现以下模式行:

vim:tw=78:ts=8:noet:ft=help:norl:

其中,tw(textwidth)选项设置最大文本宽度为78;ts(tabstop)选项设置制表符为8个空格;noet(noexpandtab)选项设置为不扩展制表符;ft(filetype)选项设置文件类型为help;norl(norightleft)选项设置文本从左向右显示。

在Apache配置文件中,包含以下模式行:

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

其中,"#"标记本行为注释;syntax选项设置语法为apache;sw(shiftwidth)选项设置缩进为4个字符;sts(softtabstop)选项设置插入Tab时算作4个空格;sr(shiftround)选项设置缩进取整到'shiftwidth'的倍数。

通过使用模式行,可以确保文本被按照正确的格式展示,而不受本地设置的干扰。

禁用模式行

使用以下设置,Vim将不会查找模式行:

:set nomodeline

帮助信息

使用以下命令,可以查看当前设置:

:verbose set modeline? modelines?

使用以下命令,可以查看帮助信息:

:help 'modeline'

:help 'modelines'

命令小结 :set modeline启用模式行 :set modelines设置检查模式行的行数

Ver: 2.0 | YYQ<上一篇 | 目录 下一篇>


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK